1

getModel() メソッドは DefaultListModel を返さず、明示的なキャストも List.getModel() メソッドに許可されていないため、2 つの JList 間で選択したデータを移動する Java コードを開発しようとしています。選択したデータをある JList から別の JList に、またはその逆に移動します。

これが私が試していることの正確なビューです...(「すべて追加」および「すべて削除」ボタンはうまく機能しています。そのためにArralistを使用していますが、選択したデータの解決策を見つけています。データの削除)

コード:

左の JList の場合"

lmLeft = new DefaultListModel();
lstLeft = new javax.swing.JList();
lstLeft.setModel(lmLeft);

右の JList の場合:

lmRight = new DefaultListModel();
lstRight = new javax.swing.JList();
lstRight.setModel(lmRight);

解決済み: JList を JTable に置き換えました

注 : DefaultListModel を getList() にキャストすることはできません。これは AbstractListModel を返すためです。

ご清聴ありがとうございました。

4

2 に答える 2

1

あなたのソリューションは、次のように非常に簡単です。

  1. 左のリストから選択したすべてのアイテムを取得する
  2. 左のリストから選択した項目を右のリストに追加

そして、Add All と Remove All を実行するのは、間違いなく非常に簡単です。JList クラスは、上記のすべてを実行するメソッドを提供します。

JList.getSelectedIndices() は、選択されたすべてのインデックスの int (int[]) の配列を返します。したがって、リストを調べて、それらのインデックスにあるアイテムを取得し、それらを右リストに追加します。

List<Object> myItemsForRightList = new ArrayList<Object>();
int[] selectedIndexes = jListLeft.getSelectedIndicies();
for(int i=0; i < selectedIndexes.length; i++) {
      Object whatever = jListLeft.getElementAt(selectedIndexes[i]);
      ((DefaultListModel)jListRight.getModel()).addElement(whatever);
}

API が提供するものも参照することをお勧めします @ http://docs.oracle.com/javase/6/docs/api/javax/swing/JList.html

--- 編集 ---
完全なソースコードが提供されていないという理由だけで、JDK 7 を念頭に置いて上記のコードを再投稿しています

public static void main(String ... args) {
       JFrame frame = new JFrame("Test");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       DefaultListModel<String> defaultListModel = new DefaultListModel<String>();
       defaultListModel.addElement("Bla bla bla");
       defaultListModel.addElement("Ble ble ble");
       defaultListModel.addElement("Blo blo blo");

       final JList<String> list = new JList<String>();
       list.setPreferredSize(new Dimension(400, 200));
       list.setModel(defaultListModel);

       JButton button = new JButton("Add");
       button.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               ((DefaultListModel<String>)list.getModel()).addElement("New one added");
           }
       });

       frame.setLayout(new BorderLayout(5, 5));
       frame.add(new JScrollPane(list), BorderLayout.NORTH);
       frame.add(button, BorderLayout.SOUTH);
       frame.pack();
       frame.setVisible(true);
   }
于 2013-10-07T13:32:02.607 に答える