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

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

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

最佳答案

你应该尝试这个代码

    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/

相关文章:

java - Android Studio : Statement must be prepended with case label

javascript - e.screenY 给出错误的值(鼠标坐标)

java - 在 Java Swing 中停止定时器

java - 如何应对从另一个应用程序获得焦点?

java - 如何在 JTextField 中回显字符而不是按下的键

java - 无法从 JAVA 程序通过 SSH 进行交互

java - 在 JFileChooser 中调整 JList 文件元素的大小

java - JList 没有滚动条

java - 如何使 JList 与我的数据库交互?

java - 当调用 JPanel 中的一个鼠标监听器时,它们都会被调用吗?