テキストフィールドとコンボボックス

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

リストをコンボボックスに置き換え

コンボボックスの作成

コンボボックスには、表示部分を編集可能にするかどうかで2つのタイプが有ります。
編集不可のタイプでは、右端の▼ボタンをクリックする事で現れる一覧の中から、1つを選択します。
編集可能のタイプでは、其れに加えて任意の文字列をキーボードから入力出来ます。
入力された文字列をリストに登録するプログラムも書けます。
此処では、編集不可のタイプを扱います。
コンボボックスは、JComboBoxクラスをインスタンス化して作成します。
リスト項目をStringクラスの配列に設定し、其れをコンストラクタの引数として与えます。
リストの場合と同じです。

static final String[] shapItem = {"四角線画", "四角塗り潰し", "楕円線画", "楕円塗り潰し"};
wakuList = new JComboBox(shapItem);

コンボボックスの動作はリストと殆ど同じですが、項目が変更されたイベントを検出するリスナは「ActionListener」で、イベント発生後に呼び出されるメソッドは「actionPerformed」です。
又、此のメソッドの引数として与えられるイベント情報のクラスは「ActionEvent」です。

ボックスレイアウト

コンボボックスを載せるパネルを「EAST」に割り付けて此処に載せ、此のパネルをボックスレイアウトで指定すると、載せた部品を縦に並べられます。
ボックスレイアウトは、縦1列又は横1列にGUI部品を並べるレイアウト法です。
パネルにボックスレイアウトを適用するには、以下の様に書きます。

パネル.setLayout(new BoxLayout(パネル, 縦又は横));

此処では、ラベルとコンボボックスのペアが上から下に並びますから、パネルに載せる順は、

「ラベル」「コンボボックス」「ラベル」「コンボボックス」・・・・

とします。

ソース ダウンロード
MedamaSwingShap2.java Medama14.zip MedamaSwingShap2.html
MedamaSwingShap2B.java MedamaSwingShap2B.html

テキストフィールドの指定

テキストフィールドの作成

テキストフィールドには、任意の文字列を1行だけキーボードから入力出来ます。
テキストフィールドは、JTextFieldクラスをインスタンス化して作成します。
又、コンストラクタの引数には、初めに表示する文字列とテキストフィールドの幅を文字数で渡します。

オブジェクト = new JTextField(文字列, 幅);

テキストフィールド内で、リターンキーが押された事を監視するリスナは「ActionListener」です。
此の時、actionPerformedメソッドが呼び出されます。

テキストフィールドオブジェクト.getText();

により、テキストフィールドに入力されたStringクラスの文字列を取得出来ます。

線の太さの指定

線の太さを変えるにはGraphics2Dクラスで、ストロークを指定します。
ストロークの指定は、BasicStrokeクラスをインスタンス化する際、コンストラクタの引数に太さをfloat型で与えます。

float size = 線の太さ;
BasicStroke stroke = new BasicStroke(size);

此のプログラムでは、線の太さはテキストボックスから入力されるので、getTextメソッドを使って得られるのは文字列です。
此をfloat型に変換するには、Floatクラスのクラスメソッド「parseFloat」を使います。

String inData = テキストフィールドオブジェクト.getText();
float size = Float.parseFloat(inData);

stroke = new BasicStroke(size); //ストロークの作成

此のストロークを画面に設定するには、Graphics2Dクラスを使います。

Graphics2D g2 = (Graphics2D)g;
g2.setStroke(stroke);

上記の様にし、「g2」をターゲットとして図形を描きます。

編集可能なコンボボックスの作成

コンボボックスを編集可能にするには、

コンボボックスのオブジェクト.setEditable(true);

と書きます。
予めリストには、「1.0」「2.0」「4.0」の3種類の数値を用意する事にします。
コンボボックスの作成は、編集不可の時と同様です。

JComboBox strokeBox; //太さを選ぶコンボボックス

String[] listItem = {"1.0", "2.0", "4.0"};
strokeBox = new JComboBox(listItem); //リストボックスの作成
strokeBox.setEditable(true); //編集可能
strokeBox.setSelectedIndex(0); //「1.0」を選択
myJPanelText.add(strokeBox); //パネルに載せる
strokeBox.addActionListener(myJPanelText); //イベントの登録

編集可能なコンボボックスでもテキストフィールドの場合と同様、キーボードからのリターン入力を「ActionListener」が検出して、actionPerformedメソッドが呼び出されます。
イベント発生時、表示されている文字列を取得するには、getSelectedItemメソッドを使いますが、此のメソッドは戻り値としてObjectクラスのオブジェクトを返します。
Objectクラスは、コンパイラから提供されるクラスの元になっているクラスで、殆どのクラスはObjectクラスのサブクラスです。
つまり、此のメソッドは、戻り値をメソッドの利用者が都合の良いクラスで受け取れる様に設計されているのです。
此処ではStringクラスのデータが欲しいので、キャスト演算子を使って、

String inData = (String)strokeBox.getSelectedItem();

と書きます。
「inData」に表示されている文字列が入ります。

入力データの登録

コンボボックスに入力されたデータをコンボボックスに登録します。
そうすると次回からは入力せずに選択出来る様になります。
入力された文字列「inData」をコンボボックスに登録するには、

strokeBox.addItem(inData);

と書きますが、「actionPerformed」はキーボードから入力された時だけではなく、リストから選択された時にも呼び出されるので、此の中で無条件に此のメソッドを呼び出して終ったのでは、同じ項目が幾つも登録されて終います。
其の為、「inData」と同じ文字列が既に登録されている時は、登録しないと言う条件を付けます。
そして、今迄登録されている全部の項目を調べて、「inData」と一致する物が既に存在するかどうか確かめなければなりません。

ソース ダウンロード
MedamaSwingStroke.java Medama15.zip MedamaSwingStroke.html
MedamaSwingStrokeA.java MedamaSwingStrokeA.html

戻る