トップページ > dsPIC入門 > Javaでハイパーターミナル(7)
アプリケーション内でエラーなどが生じた際に、メッセージボックスと呼ばれる小窓が出てくることが あります。デバッグなんかをしている時はコマンドプロンプトへSystem.out.println()なんかを使って 情報を表示させるだけで十分だったりします。しかし、いざアプリケーションとして使おうとすると、 この方法のままでは アプリケーションのほかにコマンドプロンプトも起動しなくてはならず、いろいろ面倒です。
メッセージボックスは簡単に表示することができるので、この際使い方を覚えてしまいましょう。
この1行でメッセージボックスが出ます。第一引数はメッセージボックスの小窓を出している親ウィンドウです。 親ウィンドウは無し(null)にすることもできますが、親ウィンドウを設定しておくとメッセージボックスが 親ウィンドウの中央に出てきます。nullにしておくと、メッセージボックスは画面中央に表示されます。
第二引数はメッセージボックス内に表示されるテキストです。文字列として扱われます。
第三引数はメッセージボックスのタイトルです。なんでも良いのですが、個人的にはそのメッセージボックスを 呼び出している関数(メソッド…っていうんですよね)の名前にするのが好きです。デバッグの時に どこがおかしいのか発見しやすくなります。
第四引数は、メッセージボックスの種類です。インフォメーションなのか、エラーなのか、もしくは Yes/Noの応答がほしいのか…。 ここに入れるのはJOptionPaneクラス内のフィールドとなります。 ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE、PLAIN_MESSAGEなどがあります。
今回使うメッセージボックスは、親ウィンドウなし、テキストは“接続しました。”、タイトルは“actionPerformed()” 、メッセージボックスの種類はインフォメーションとしておきます。
前回作ったボタンを押すと表示が出るプログラムに、メッセージボックスも出るように変更を加えてみます。 アクションクラスに、1行付け足すだけなのですが…。
//*****************************************************************************
//内部クラスとしてアクションクラスを定義(bt1用です)
class open_action extends AbstractAction
{
//============================================================================
//コンストラクタ
open_action()
{
putValue(Action.NAME,"接続");
}
//============================================================================
//ボタンがおされた際の処理
public void actionPerformed(ActionEvent bt1_act)
{
tx.append("接続しました。\n");
JOptionPane.showMessageDialog(null,"接続しました。","actionPerformed()",JOptionPane.INFORMATION_MESSAGE);
}
}
ファイル名は“serial_canvas3.java”です。
//******************************************************************************
//Javaでハイパーターミナル(3.5) メッセージボックスを出してみる
//******************************************************************************
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.5");
//============================================================================
//コンテント・ペインを作成。コンテント・ペインは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");
JOptionPane.showMessageDialog(null,"接続しました。","actionPerformed()",JOptionPane.INFORMATION_MESSAGE);
}
}
//*****************************************************************************
//内部クラスとしてアクションクラスを定義(bt2用です)
class close_action extends AbstractAction
{
//============================================================================
//コンストラクタ
close_action()
{
putValue(Action.NAME,"切断");
}
//============================================================================
//ボタンがおされた際の処理
public void actionPerformed(ActionEvent bt1_act)
{
tx.append("切断しました。\n");
}
}
}