トップページ > 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,"押されました"); } }