我的两个 JList 组件有问题。
我在 JFrame 上创建并放置了两个 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);
}
}
但是,当它取消选择这两个列表之一时,我必须单击两次才能进行新选择。因为第一次单击它时,我想通过它选择的项目并没有真正选择它(由 listSelectionListener 确认),所以我必须在第一次选择期间按住鼠标左键移动鼠标或单击第二次然后它实际上选择了该项目。
我发现这种行为很奇怪,我不希望它表现得像这样。有什么建议吗?