リストの項目を追加する

広告

まずはリストの一番最後に項目を追加してみます。DefaultListModelクラスの"addElement"メソッドを使います。

指定されたコンポーネントをリストの末尾に追加します。

パラメータ:
  obj - 追加されるコンポーネント

引数にリストに追加したい値を指定します。使い方としては下記のようになります。

DefaultListModel model = new DefaultListModel();

model.addElement("項目1");
model.addElement("項目2");

次に指定の位置に項目を挿入する場合です。DefaultListModelクラスの"add"メソッドを使います。

リスト内の指定された位置に指定された要素を挿入します。 

インデックスが範囲 (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"メソッドを使っています。

リスト内のコンポーネント数を返します。

このメソッドは、1.2 の Collections Framework で定義された List インタ
フェースを実装する size と同じです。このメソッドは setSize との組み合
わせで存在するので、size は JavaBean プロパティとして識別できます。

戻り値:
  リスト内のコンポーネント数

このメソッドを使うと、現在の項目数を調べることができます。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)