如何按照选择顺序从JList获取项目?

时间:2014-08-18 22:29:36

标签: java jlist mouselistener

我有一个启用了MULTIPLE_INTERVAL_SELECTION的JList,我想将选择项目的顺序传递给另一个进程。

我尝试在JList上使用MouseListener并检查是否getClickCount() == 1然后将其添加到数组中,但是,这不会添加低于所选项目的新项目,它仅添加JList中当前所选项目之上的项目。

例如,如果我的列表如下所示:

  

1

     

2

     

3

     

4

     

5

如果我先点击数字1,则以下代码只会针对每次后续点击显示1。如果我先点击3,然后点击5弹出的号码为3。如果我点击3然后点击21,这些数字就会正确显示。

所以我从来没有真正开始将数据添加到数组中,因为我无法正确显示基于动作的数据。

以下是来自侦听器的示例代码:

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());
         }
      }
}

我试图做的事情有什么明显的错误吗?

2 个答案:

答案 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());
                     }
          }
});