2 つの JList コンポーネントに問題があります。
JFrame に 2 つの JList コンポーネントを作成して配置しました。私は listSelectionListeners を両方に追加しました。これは、他の JList の選択を次のように選択解除する必要があります: (編集: 要求された自己完結型のサンプルとして作成するには)
public class JListIssue {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel mainPanel = new JPanel();
frame.setContentPane(mainPanel);
final JList jList1 = new JList();
mainPanel.add(jList1);
final JList jList2 = new JList();
mainPanel.add(jList2);
// Setting up models for both JList components to display example values
jList1.setModel(new AbstractListModel() {
String[] items = {"Item 1", "Item 2", "Item 3"};
public int getSize() { return items.length; }
public Object getElementAt(int i) { return items[i]; }
});
jList2.setModel(new AbstractListModel() {
String[] items = {"Item 1", "Item 2", "Item 3"};
public int getSize() { return items.length; }
public Object getElementAt(int i) { return items[i]; }
});
// Adding listeners
jList1.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
jList2.clearSelection();
}
});
jList2.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
jList1.clearSelection();
}
});
frame.pack();
frame.setVisible(true);
}
}
ただし、これら 2 つのリストのいずれかの選択を解除すると、2 回クリックして新しい選択を行う必要があります。初めてクリックすると、選択したい項目が実際には選択されないので(listSelectionListenerで確認)、最初の選択中にマウスの左ボタンを押したままマウスを移動するか、2回目にクリックする必要がありますそして実際にアイテムを選択します。
私はこの振る舞いが奇妙だと思うので、このように振る舞いたくありません。なにか提案を?