トップページ > dsPIC入門 > Javaでハイパーターミナル(6)

ボタンとアクションクラス

ボタンを追加

ボタンを付けます。ここまで来ると、アプリケーションっぽい感じがしてきますね…。 ボタンについてはすでにシリアル通信のところで使ったことがあります。 また、これまでのテキストボックスやコンボボックスと比べると、設定が必要なパラメーターが 少ないので楽かと思います。解説はさらっといきます。

ボタン追加のコーディング

  //============================================================================
  //ボタンを追加
  JButton bt1 = new JButton("接続");
  bt1.setBounds(50,400,150,40);
  cp.add(bt1);

  JButton bt2 = new JButton("切断");
  bt2.setBounds(300,400,150,40);
  cp.add(bt2);

これまでの流れのとおり、MainFrameクラスのコンストラクタの最後に、上のコードを追加します。 すると、2つのボタンが表示されます。押しても何も起こりません。。。

アクションクラスを実装する

ボタンを押した時の処理を、“AbstractAction”クラスを継承することで実装します。このクラスを使うと、 コンポーネントの名前やアイコン、詳細情報などを一括管理できて便利です。 今回はボタン名を表示する部分しか使用していませんが、コーディングが分かりやすいので十分意味がある と思います。

アクションクラスはボタンのコンポーネントが定義されているMainFrameクラスの内部クラスとして 定義します。これは、ボタンが押されたことをチェックするために、テキストエリアに文字を表示 させたいからです。テキストエリアが定義されているクラス内であれば、余計な事を考えないで アクセスすることができます。


 //*****************************************************************************
 //内部クラスとしてアクションクラスを定義(bt1用です)
 class open_action extends AbstractAction
 {
  //============================================================================
  //コンストラクタ
  open_action()
  {
   putValue(Action.NAME,"接続");
  }

  //============================================================================
  //ボタンがおされた際の処理
  public void actionPerformed(ActionEvent bt1_act)
  {
   tx.append("接続しました。\n");
  }
 }

こんな感じです。コンストラクタでは“putValue()”メソッドを使ってボタンに表示される 名前を登録するのでした。ボタンが押された際の処理は“actionPerformed()”メソッドで 記述します。今回の処理は…

tx.append("接続しました。\n");

“append()”メソッドはテキストエリアクラス内のメソッドです。 引数として取った文字列を、テキストエリアの最後尾に追加します。


  JButton bt1 = new JButton(new open_action());

ボタンにアクションクラスを登録するには、コンストラクタの引数に入れてやるだけです。

ソースコード

ファイル名は“serial_canvas3.java”です。

//******************************************************************************
//Javaでハイパーターミナル(3)  ボタンを設置
//******************************************************************************

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import gnu.io.*;
import java.io.*;


//******************************************************************************
//メインクラス。メイン関数内では、ただMainFrameを作成するだけです。
public class serial_canvas3
{
 //=============================================================================
 //メイン関数
 public static void main(String args[])
 {
  MainFrame frame = new MainFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.setVisible(true);
 }
}


//******************************************************************************
//実際のコンポーネントとかは、このクラスで管理します。JFrameを継承・・・
class MainFrame extends JFrame
{
 //=============================================================================
 //クラスのフィールド
 JTextArea tx;


 //=============================================================================
 //コンストラクタ
 MainFrame()
 {
  //============================================================================
  //JFrameクラスのコンストラクタを呼びます
  super("serial_canvas3");

  //============================================================================
  //コンテント・ペインを作成。コンテント・ペインはJPanel型です。
  JPanel cp = new JPanel();
  cp.setLayout(null);
  add(cp);

  //============================================================================
  //テキストエリアおよびスクロールペインを作成。
  tx = new JTextArea();
  tx.setLineWrap(true);
  JScrollPane sp = new JScrollPane(tx);
  sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  sp.setBounds(50,50,400,300);
  cp.add(sp);
  Font font = new Font("SansSerif",Font.PLAIN,16);
  tx.setFont(font);

  //============================================================================
  //COMポート選択のためのコンボボックスを追加
  JComboBox com_combo = new JComboBox();
  com_combo.addItem("COM1");
  com_combo.addItem("COM2");
  com_combo.addItem("COM3");
  com_combo.addItem("COM4");
  com_combo.addItem("COM5");
  com_combo.addItem("COM6");
  com_combo.addItem("COM7");
  com_combo.addItem("COM8");
  com_combo.setBounds(120,20,80,20);
  cp.add(com_combo);

  com_combo.setSelectedItem("COM5");

  JLabel com_label = new JLabel("COMポート :");
  com_label.setBounds(50,20,100,20);
  cp.add(com_label);

  //============================================================================
  //通信速度(ボー・レート)選択のためのコンボボックスを追加
  JComboBox baud_combo = new JComboBox();
  baud_combo.addItem("4800");
  baud_combo.addItem("9600");
  baud_combo.addItem("19200");
  baud_combo.addItem("38400");
  baud_combo.addItem("57600");
  baud_combo.addItem("115200");
  baud_combo.addItem("230400");  
  baud_combo.setBounds(350,20,80,20);
  cp.add(baud_combo);

  baud_combo.setSelectedItem("115200");

  JLabel baud_label = new JLabel("ボー・レート :");
  baud_label.setBounds(250,20,100,20);
  cp.add(baud_label);



  //----------------------------------------------------------------------------
  //ここからが追加部分です。


  //============================================================================
  //ボタンを追加
  JButton bt1 = new JButton(new open_action());
  bt1.setBounds(50,400,150,40);
  cp.add(bt1);

  JButton bt2 = new JButton(new close_action());
  bt2.setBounds(300,400,150,40);
  cp.add(bt2);
 }


 //*****************************************************************************
 //内部クラスとしてアクションクラスを定義(bt1用です)
 class open_action extends AbstractAction
 {
  //============================================================================
  //コンストラクタ
  open_action()
  {
   putValue(Action.NAME,"接続");
  }

  //============================================================================
  //ボタンがおされた際の処理
  public void actionPerformed(ActionEvent bt1_act)
  {
   tx.append("接続しました。\n");
  }
 }


 //*****************************************************************************
 //内部クラスとしてアクションクラスを定義(bt2用です)
 class close_action extends AbstractAction
 {
  //============================================================================
  //コンストラクタ
  close_action()
  {
   putValue(Action.NAME,"切断");
  }

  //============================================================================
  //ボタンがおされた際の処理
  public void actionPerformed(ActionEvent bt1_act)
  {
   tx.append("切断しました。\n");
  }
 }

}



前へ   次へ