リストの項目を追加する
まずはリストの一番最後に項目を追加してみます。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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。