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

时间:2015-05-29 20:49:40

标签: java swing jlist

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

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

2 个答案:

答案 0 :(得分:2)

这是我的代码:

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

});

因此,您实际上要做的是将ListSelectionListener“插入”到JList,以便可以通知JList发生的任何事件。在valueChanged中添加代码需要在用户选择JList中的内容时执行。

答案 1 :(得分:0)

JList JavaDoc有这个很棒的资源。