如何在不使用按钮的情况下 select JList 中的项目?

How to select an item from a JList without using a button?

我一直在制作一个程序,其中一部分是能够从 JList 中选择一个项目并让它在 JLabel 中显示一个特定的图标。我已经让它工作,以便用户必须 select 列表中的项目,然后按一个按钮来启动操作。

我只是想知道是否有任何方法可以使按钮不再需要?换句话说,用户只需单击列表项,它就会立即启动操作。

JList JavaDoc 中有这个很棒的资源。

这是我的代码:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Example extends JFrame 
{
  JList list = null;

  Example() 
  {
    Container cp = getContentPane();

    cp.setLayout(new FlowLayout());
    ArrayList data = new ArrayList();

    data.add("Py");
    data.add("Piper");

    list = new JList(data.toArray());

    list.addListSelectionListener(new ListSelectionListener() 
    {

      public void valueChanged(ListSelectionEvent evt) 
      {
        // To avoid double value selected
        if (evt.getValueIsAdjusting())
                  return;
        System.out.println("Selected: " + list.getSelectedValue());
      }

    });

    cp.add(new JScrollPane(list), BorderLayout.CENTER);
  }

  public static void main(String[] s)
  {
    Example l = new Example();
    l.pack();
    l.setVisible(true);
  }
}

所以就在这里:

list.addListSelectionListener(new ListSelectionListener() 
{

    public void valueChanged(ListSelectionEvent evt) 
    {
         // To avoid double value selected
         if (evt.getValueIsAdjusting())
            return;
         System.out.println("Selected: " + list.getSelectedValue());
    }

});

所以您实际做的是 "plug" 一个 ListSelectionListener 到您的 JList,以便可以通知 JList 发生的任何事件。在 valueChanged 中添加当用户 select JList 中的某些内容时需要执行的代码。