我有一个启用了 MULTIPLE_INTERVAL_SELECTION
的 JList,我想将项目选择的顺序传递给另一个进程。
我尝试在 JList 上使用 MouseListener
并检查 getClickCount() == 1
是否然后将其添加到数组中,但是,这不会添加新的位于所选项目下方的项目,它仅添加位于 JList 中当前所选项目上方的项目。
例如,如果我的列表如下所示:
1
2
3
4
5
如果我首先点击数字 1
,那么下面的代码将仅在后续每次点击时显示 1
。如果我先单击 3
,然后单击 5
,弹出的数字是 3
。如果我单击 3
,然后单击 2
或 1
,这些数字将正确弹出。
所以我从来没有真正接触到向数组添加数据的部分,因为我无法根据操作正确显示数据。
以下是监听器的示例代码:
private class ListBoxListener implements ListSelectionListener, MouseListener {
@Override
public void valueChanged(ListSelectionEvent e) {
if(e.getSource().equals(aList)) {
System.out.println(aList.getSelectedValue());
}
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getClickCount() == 1) {
JOptionPane.showMessageDialog(null, aList.getSelectedValue());
}
}
}
我想做的事情有什么明显的错误吗?
最佳答案
你应该尝试这个代码
JFrame frame = new JFrame("JList Test");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
String[] selections = {"Java", "C++", "C", "Scala", "JavaScript"};
JList list = new JList(selections);
frame.add(new JScrollPane(list));
frame.pack();
frame.setVisible(true);
MouseListener mouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent mouseEvent) {
if (mouseEvent.getClickCount() == 1) {
int index = list.locationToIndex(mouseEvent.getPoint());
if (index >= 0) {
Object obj = list.getModel().getElementAt(index);
JOptionPane.showMessageDialog(null, obj);
}
}
}
};
list.addMouseListener(mouseListener);
}
关于java - 如何按照选择的顺序从 JList 获取项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25373037/