リストの項目を追加する
まずはリストの一番最後に項目を追加してみます。DefaultListModelクラスの"addElement"メソッドを使います。
public void addElement(Object obj)
指定されたコンポーネントをリストの末尾に追加します。 パラメータ: obj - 追加されるコンポーネント
引数にリストに追加したい値を指定します。使い方としては下記のようになります。
DefaultListModel model = new DefaultListModel();
model.addElement("項目1");
model.addElement("項目2");
次に指定の位置に項目を挿入する場合です。DefaultListModelクラスの"add"メソッドを使います。
public void add(int index, Object element)
リスト内の指定された位置に指定された要素を挿入します。 インデックスが範囲 (index < 0 || index >= size()) 外の場合は ArrayIndexOutOfBoundsException をスローします。 パラメータ: index - 指定の要素が挿入される位置のインデックス element - 挿入される要素
引数にリストに挿入したい値と、挿入する位置を表すインデックス番号を指定します。使い方としては下記のようになります。
DefaultListModel model = new DefaultListModel();
model.addElement("項目1");
model.addElement("項目2");
model.add(1, "項目1.5");
では実際に試してみます。下記のサンプルではDefaultListModelクラスのオブジェクトを用意し、初期データを与えてJListを作成した後、動的に項目を追加したり挿入したりしています。単に項目を追加するだけではなく、追加された項目が見えない位置にある場合はスクロールするようにしています。
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
import java.awt.event.*;
import javax.swing.event.*;
public class JListSample extends JFrame implements ActionListener{
protected JList list;
protected JTextField text;
protected DefaultListModel model;
public static void main(String[] args){
JListSample test = new JListSample("JListSample");
/* 終了処理を変更 */
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setBounds( 10, 10, 250, 180);
test.setVisible(true);
}
JListSample(String title){
setTitle(title);
model = new DefaultListModel();
/* 初期データをモデルに追加する */
StringBuffer sb;
for (int i = 0 ; i < 15 ; i++){
sb = new StringBuffer();
sb.append("項目");
sb.append(i);
model.addElement(new String(sb));
}
list = new JList(model);
JScrollPane sp = new JScrollPane();
sp.getViewport().setView(list);
sp.setPreferredSize(new Dimension(200, 80));
JPanel p = new JPanel();
p.add(sp);
getContentPane().add(p, BorderLayout.CENTER);
JButton addButton = new JButton("AddElement");
addButton.addActionListener(this);
addButton.setActionCommand("addButton");
JButton insertButton = new JButton("Add");
insertButton.addActionListener(this);
insertButton.setActionCommand("insertButton");
JPanel p2 = new JPanel();
p2.add(addButton);
p2.add(insertButton);
getContentPane().add(p2, BorderLayout.SOUTH);
text = new JTextField(10);
JPanel p3 = new JPanel();
p3.add(text);
getContentPane().add(p3, BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e){
String actionCommand = e.getActionCommand();
if (actionCommand.equals("addButton")){
model.addElement(text.getText());
list.ensureIndexIsVisible(model.getSize() - 1);
}else if (actionCommand.equals("insertButton")){
/* 現在リストで選択されている項目のIndexを調べる */
int index = list.getSelectedIndex();
if (index == -1){
model.add(0, text.getText());
}else{
model.add(index + 1, text.getText());
}
list.ensureIndexIsVisible(index + 1);
}else{
return;
}
}
}
実行結果は下記のようになります。
項目をテキストフィールドに入力してAddElementボタンを押すと下記のようになります。
項目を1つ選択しAddボタンを押すと下記のようになります。
上記のサンプルでは、モデルに現在登録されている項目数を調べるために、DefaultListModelクラスで用意されている"getSize"メソッドを使っています。
public int getSize()
リスト内のコンポーネント数を返します。 このメソッドは、1.2 の Collections Framework で定義された List インタ フェースを実装する size と同じです。このメソッドは setSize との組み合 わせで存在するので、size は JavaBean プロパティとして識別できます。 戻り値: リスト内のコンポーネント数
このメソッドを使うと、現在の項目数を調べることができます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。