【发布时间】:2015-05-29 20:49:40
【问题描述】:
我一直在制作一个程序,其中一部分是能够从JList 中选择一个项目并让它在JLabel 中显示一个特定的图标。我已经使它工作,以便用户必须从列表中选择项目,然后按下按钮来启动操作。
我只是想知道是否有任何方法可以使它不需要按钮?换句话说,用户只需单击列表项,它就会立即启动操作。
【问题讨论】:
我一直在制作一个程序,其中一部分是能够从JList 中选择一个项目并让它在JLabel 中显示一个特定的图标。我已经使它工作,以便用户必须从列表中选择项目,然后按下按钮来启动操作。
我只是想知道是否有任何方法可以使它不需要按钮?换句话说,用户只需单击列表项,它就会立即启动操作。
【问题讨论】:
这是我的代码:
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 中选择某些内容时需要执行的代码。
【讨论】:
JList JavaDoc 有这个很棒的资源。
【讨论】: