リストの項目を変更する

広告

リストの項目を新しい項目に置き換える方法について見ていきます。削除して追加でも、もちろん可能ですが置き換えるためのメソッドが別途用意されています。DefaultListModelクラスで用意されている"set"メソッドを使います。

リストの指定された位置にある要素を、指定された要素で置き換えます。

インデックスが範囲 (index < 0 || index >= size()) 外の場合は 
ArrayIndexOutOfBoundsException をスローします。 

パラメータ:
  index - 置換される要素のインデックス
  element - 指定された位置に格納される要素 
戻り値:
  指定された位置に以前あった要素

引数で置き換えたい項目のインデックス番号と、新しい項目を指定します。

では実際に試して見ます。

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 setButton = new JButton("Set");
    setButton.addActionListener(this);
    setButton.setActionCommand("setButton");

    JPanel p2 = new JPanel();
    p2.add(setButton);

    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("setButton")){
      if (!list.isSelectionEmpty()){
        int index = list.getSelectedIndex();
        model.set(index, text.getText());
      }
    }else{
      return;
    }
  }
}

実行結果は下記のようになります。

項目を1つ選択して新しい項目内容をテキストボックスに入力して下さい。

リストの項目を変更する

次にSetボタンを押すと項目が置き換わります。

リストの項目を変更する

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。