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

コンボボックスについて

コンボボックス

ハイパーターミナルでは、シリアル通信に使用するCOMポートと通信速度を指定することができました。 いままでJavaで組んできた自作プログラムでは、ソースコード内で使用するCOMポートと通信速度を記述して しまったので、プログラム起動後はそれらの値を変更できません。これだと不便なので、 “コンボボックス”を取り付けて、あとから選択できるようにします。

コンボボックスを追加

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

//******************************************************************************
//Javaでハイパーターミナル(2)  コンボボックスを追加
//******************************************************************************

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


//******************************************************************************
//メインクラス。メイン関数内では、ただMainFrameを作成するだけです。
public class serial_canvas2
{
 //=============================================================================
 //メイン関数
 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
{
 //=============================================================================
 //コンストラクタ
 MainFrame()
 {
  //============================================================================
  //JFrameクラスのコンストラクタを呼びます
  super("serial_canvas2");

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

  //============================================================================
  //テキストエリアおよびスクロールペインを作成。
  JTextArea 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を作成
  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);
 }
}

追加部分について

コンポーネント作成→内部設定→コンテントペインに貼り付け
…という流れは、結局どのコンポーネントでも共通なんですね。今回も同じことです。

コンボボックスを作成

  //JComboBoxを作成
  JComboBox com_combo = new JComboBox();

普通にコンストラクタを呼ぶだけです。名前は、COMポート選択用のコンボボックス…ということで“com_combo”と しました。


コンボボックスにアイテムを追加

  //コンボボックスに表示される内容を追加していきます。
  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");

“addItem()”メソッドを使用することで、コンボボックスに表示される内容が追加されていきます。 このメソッドの引数は文字列です。


コンボボックスをコンテントペインに貼り付け

  //座標とサイズを設定して・・・
  com_combo.setBounds(120,20,80,20);

  //コンテントペインへ登録します。
  cp.add(com_combo);

…あとは、例のごとく“setBounds()”メソッドで位置と大きさを指定して、コンテントペインへaddします。

基本が分かったところで・・・

コンボボックスの使い方がだいたいつかめました。結構手軽に使えてしまうんですね…。では、 より実用に近い形として、いくつか改良を加えていきます。

…という流れでいきます。

デフォルト指定

プログラム起動直後に、コンボボックス内のある要素が選択されているようにすると、自分のPCなど固定された 環境で繰り返し使用する際に便利です。私のPCでは、シリアル通信ポートとして毎回COM5を使用してきたので、 起動直後にCOM5がデフォルトで指定されるようにしてみます。…とは言っても、1つメソッドを 呼ぶだけです。

  //デフォルトとして、COM5を選択
  com_combo.setSelectedItem("COM5");

“setSelectedItem()”は、名前のとおり、コンボボックス内のある項目を選択するために使います。 引数は文字列ですので、そのまんま“COM5”と入れてやれば、起動直後にCOM5が選択された 状態となります。

ラベルをつける

そのコンボボックスが何を設定するためにあるのか…一見してわかるように、ラベルを貼っておきます。 JLabelクラスのラベルについては、初めて触れるかもしれません。しかし、ただコンストラクトして 位置&サイズ設定、コンテントペインに貼る…というだけなので、くどい説明は抜きにします。

  //「COMポート :」と表示するラベルを作成。
  JLabel com_label = new JLabel("COMポート :");

  //位置とサイズを指定。
  com_label.setBounds(50,20,100,20);
 
  //コンテントペインへ登録 
  cp.add(com_label);

通信速度用のコンボボックスも加えて、最終版です。

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

//******************************************************************************
//Javaでハイパーターミナル(2.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_canvas2
{
 //=============================================================================
 //メイン関数
 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
{
 //=============================================================================
 //コンストラクタ
 MainFrame()
 {
  //============================================================================
  //JFrameクラスのコンストラクタを呼びます
  super("serial_canvas2.5");

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

  //============================================================================
  //テキストエリアおよびスクロールペインを作成。
  JTextArea 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);


  //デフォルトとして、COM5を選択
  com_combo.setSelectedItem("COM5");


  //「COMポート :」と表示するラベルを作成。
  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);


  //デフォルトとして、115200[bit/s]を選択
  baud_combo.setSelectedItem("115200");


  //「ボー・レート :」と表示するラベルを作成。
  JLabel baud_label = new JLabel("ボー・レート :");
  baud_label.setBounds(250,20,100,20);
  cp.add(baud_label);
 }
}





前へ   次へ