トップページ > dsPIC入門 > Javaでシリアル通信(5)
前回までで、Javaにおいてシリアルポートを使用する方法が分かりました。そもそもJavaを選んだ理由の1つに、 GUIを簡単にコーディングできる!というのがあったので、今回はGUIでのシリアル通信を実装してみようとおもいます。 Swingについては多くの文献やWebページで解説されているので、ここではさわりだけ…ということにします。
基本的なウィンドウを出す最低限のコードです。ウィンドウを閉じるための処理を記述する必要がある点に 注意します。
import javax.swing.*;
public class window_test
{
public static void main(String[] args)
{
//Frameを生成
JFrame frame = new JFrame("window_test");
//閉じる処理を指定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//サイズを設定
frame.setSize(300,300);
//見えるように…
frame.setVisible(true);
}
}
ボタンは、ボタンのクラスのインスタンスを生成するだけです。ただし、フレーム(ウィンドウ)に直接 ボタンを貼り付けることはできません。“コンテントペイン”というレイヤー(?)を生成して、 その上にボタンを配置→コンテントペインをフレームに配置…という手順を踏みます。 今回はボタンを表示するだけなので、ボタンをクリックしても何も起こりません。
import javax.swing.*;
public class button_test
{
public static void main(String[] args)
{
//Frameを生成
JFrame frame = new JFrame("button_test");
//閉じる処理を指定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//サイズを設定
frame.setSize(300,300);
//見えるように…
frame.setVisible(true);
//****************************************************************************
//ここから先が、付け足し部分です
//コンテントペインを生成
JPanel contentPane = new JPanel();
//ボタンを生成
JButton button = new JButton("ボタン");
//ボタンを、コンテントペインへ登録
contentPane.add(button);
//コンテントペインを、フレームへ登録
frame.setContentPane(contentPane);
//レイアウトは、今回はマニュアルで指定。
contentPane.setLayout(null);
//ボタンを中央に配置
button.setBounds(50,100,200,100);
}
}
では、ボタンを押した際に行いたい処理の記述方法を見ていきます。 以前まではActionListenerとか、Adapterとか、いろいろ煩雑だったのですが、今は Actionクラスを実装することで非常に分かりやすく書くことができます。 今回のプログラムからawtのeventライブラリをインポートしています。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class action_test
{
public static void main(String[] args)
{
//Frameを生成
JFrame frame = new JFrame("action_test");
//閉じる処理を指定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//サイズを設定
frame.setSize(300,300);
//見えるように…
frame.setVisible(true);
//コンテントペインを生成
JPanel contentPane = new JPanel();
//****************************************************************************
//ボタン生成の際に、アクションをセットします。
JButton button = new JButton(new button_action());
//****************************************************************************
//ボタンを、コンテントペインへ登録
contentPane.add(button);
//コンテントペインを、フレームへ登録
frame.setContentPane(contentPane);
//レイアウトは、今回はマニュアルで指定。
contentPane.setLayout(null);
//ボタンを中央に配置
button.setBounds(50,100,200,100);
}
}
//******************************************************************************
//******************************************************************************
//ボタンが押された際のイベント処理は、アクションクラスとして完全にクラス化!
class button_action extends AbstractAction
{
//コンストラクタ
button_action()
{
//コンストラクタ内で、表示されるテキストを設定する
putValue(Action.NAME,"ボタン");
}
//このactionPerformed()メソッド内で実行したい処理を記述
public void actionPerformed(ActionEvent e)
{
//今回は、表示テキストを変えるだけ…
putValue(Action.NAME,"押されました");
}
}