whichのブログ ~プログラミング体験記~ -5ページ目

whichのブログ ~プログラミング体験記~

主にJava,vVsual C#,Andoroid,SQLについて
覚え基本た文法やプログラミング技法、各クラスの利用法を
忘れないように形にしたものです

初心者だとかプロだとか特に意識せず利用してもらえるとうれしいです。

■JComboBox クラス
リストと似た振る舞いをする部品としてコンボボックスがあり、違いはおそらく項目を折りたたんで表示するところぐらいでしょう

コンストラクター

コンストラクタ引数説明
JComboBox() なしJComboBoxを生成
(選択項目なし)
JComboBox(Object [ ] listData) オブジェクト配列引数の配列要素を選択項目として登録したJComboBoxを生成
JComboBox( ComboBoxModel       dataMode)コンボボックス管理モデルコンボボックス管理モデルを利用したJComboBoxを生成

メソッド

メソッド返却値引数説明
setSelectedIndex(int index)void項目番号引数の番号の項目を選択する
getSelectedIndex( )intなし選択されている項目の項目番号を取得
setSelectedItem(Object values)void項目値、状態指定した項目を選択
getSelectedItem()Objectなし選択された項目の値を取得
コンボボックスの利点としてはあまり複数選択する仕様で実装しないところにある。
■DefaultComboBoxModel
JList 同様 JComboBox自身は項目の追加・削除ができないのでこの部品も管理クラスが用意されている
操作メソッド返却値引数説明
追加addItem(Object values)なし項目値末尾に項目を追加
追加insertItemAt(Object values,int index)なし項目値,項目番号引数で指定した位置に項目を追加
削除removeItemAt(int index)なし項目番号引数の項目番号の項目を削除
削除removeItem(Object values)なし項目値項目値を削除
削除removeAllItems()なしなし項目をすべて削除
正直なところコンボボックスの項目は増減しない選択肢のやくわりがあるためコンボボックス管理クラスは必要ないかも

■イベント
コンボボックスは基本ActionListenerですが追加や削除を行うときだけItemListenerのイベントが発生します。

■部品や画面の操作性を向上させる部品
Webブラウザの標準機能でもあるタブページやスクロールバーはもちろんJavaでもありますが、イベントが発生しないため各部品の簡単な説明でけにします。

JScrollPaneクラス :テキストエディタやリストにスクロール機能を提供する
JSplitPaneクラス   :分割用のしきい棒がついたレイアウトが実装できる(BorderLayoutクラスとほぼ使い方が一緒)
JTabbedPaneクラス:タブ切り替えのページレイアウトが実装できる

JSplitPaneクラスとJTabbedPaneクラスのフィールド値
水平方向に分割垂直方向に分割
HORIZONTAL_SPLITVERTICAL_SPLITLEFTRIGHTTOPBOTTOM
コンストラクタ
new JScrollPane(部品)      :引数の部品にスクロールを実装した部品オブジェクトを生成
new JSplitPane(分割の向き) :引数で指定された分割方向(上の表参照)に分割するレイアウト生成
new JTabbedPane(表示場所) :引数で指定された表示位置(上の表参照)にタブが表示されるレイアウトを生成

JTabbedPaneのタブ生成用メソッド
add(レイアウトオブジェクト又は部品 , タブタイトル) :第1引数に表示内容、第2引数にタブのタイトル文字列を指定して逐次追加する

■サンプルプログラム
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

public class GuiComboBox extends JFrame implements ActionListener{
private JList list;
private JComboBox box;
private final String [] item_sort = {"整列","降順"};
private final String [] item  = {"日本","イギリス","ロシア","アメリカ","フランス","ドイツ","カナダ","ブラジル"};
public static void main(String [] arges) { new GuiComboBox();}
public GuiComboBox(){
setTitle("JavaでGUIその5");
setSize(400,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JTabbedPane tab = new JTabbedPane();
JButton act = new JButton("実行");
act.addActionListener(this);
box = new JComboBox(item_sort);
list = new JList(item);
JScrollPane scroll = new JScrollPane(list);
JPanel pane = new JPanel();
pane.add(box);
pane.add(act);
pane.add(new JLabel("ソートにタイムラグがあります"));
split.add(pane,JSplitPane.LEFT);
split.add(scroll,JSplitPane.RIGHT);
tab.add("メイン",split);
tab.add("おまけ",(new JPanel()).add(new JLabel("この画面は何もしません")));
add(tab,BorderLayout.CENTER);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
int index = box.getSelectedIndex();
if(index == 0){
Arrays.sort(item);
} else if(index == 1){
Arrays.sort(item, Collections.reverseOrder());
}
}
}
実行結果

    
メインタブの初期画面                       おまけタブの画面

コンボボックスから整列を選んで実行ボタンを押すとしたのリストが昇順される。



降順を選んで実行ボタンを押しと元に戻る



スクロールを実感させるためにウィンドウサイズを普段と変えてみました。
(実行後動的に変更すると消える)