我有一个启用了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());
}
}
}
我试图做的事情有什么明显的错误吗?
答案 0 :(得分:2)
你应该试试这段代码
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);
}
答案 1 :(得分:0)
我知道您想向jList添加项目侦听器。因此,下面是一个简单的代码,向您展示如何实现:
ArrayList<String> list = new ArrayList<>();
jList1.addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged( ListSelectionEvent e){
if(! e.getValueIsAdjusting()){
list.add(jList1.getSelectedValue());
}
}
});