查找 JList 的选中项并实时显示
Posted
技术标签:
【中文标题】查找 JList 的选中项并实时显示【英文标题】:Find selected item of a JList and display it in real time 【发布时间】:2012-11-27 20:32:40 【问题描述】:我有一个JList
,我在其中显示一些 ID。我想捕获用户单击的 ID 并将其显示在 JLabel
上。
String selected = jlist.getSelectedItem().toString();
上面的代码给了我选择的JList
值。但是这段代码必须放在按钮事件中,当我单击按钮时,它将获取 JList 值并将其分配给JLabel
。
但是,我想要做的是,只要用户点击JList
的一个项目,就可以实时更新JLabel
。 (无需单击按钮来触发操作)
【问题讨论】:
【参考方案1】:一个简单的例子如下使用listselectionlistener
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class JListDemo extends JFrame
public JListDemo()
setSize(new Dimension(300, 300));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
final JLabel label = new JLabel("Update");
String[] data = "one", "two", "three", "four" ;
final JList dataList = new JList(data);
dataList.addListSelectionListener(new ListSelectionListener()
@Override
public void valueChanged(ListSelectionEvent arg0)
if (!arg0.getValueIsAdjusting())
label.setText(dataList.getSelectedValue().toString());
);
add(dataList);
add(label);
setVisible(true);
public static void main(String args[])
new JListDemo();
【讨论】:
请告诉我投反对票的原因。它可能对我有帮助 杂乱无章,请保持您的答案准确。由于作者已经知道如何设置 Java 类、侦听器等,因此只有侦听器部分有用。我正在删除我的反对票,因为答案仍然正确。 @Blacklight 这对我来说真是个好建议。我会用我的进一步回答来考虑它。非常感谢 @vini 当我将 Jlist 值打印到控制台时,我将其打印了两次。那么你知道为什么它会被调用两次吗? @sharonHwk 所有答案都有一个小错误:查看 event.getValueIsAdjusting 属性 - 只有在错误时才做你的事情【参考方案2】:为什么不在JList
上添加ListSelectionListener
,然后将上面的代码添加到其中。
我假设您已经知道如何根据您的问题在 JButtons 上创建侦听器,因此您只需对其进行调整以创建 ListSelectionListener
,然后使用 jlist.addListSelectionListener(myListener);
将侦听器分配给您的 JList
有一个很好的教程here 可以帮助您入门,或参考documentation
你的目标应该是这样的......
jlist.addListSelectionListener(new ListSelectionListener()
public void valueChanged(ListSelectionEvent event)
if (!event.getValueIsAdjusting())
JList source = (JList)event.getSource();
String selected = source.getSelectedValue().toString();
);
【讨论】:
不完整..(@sharon 在另一个答案中已经注意到的效果)【参考方案3】:使用ListSelectionListener
:
JList list = new JList(...);
list.addListSelectionListener(new ListSelectionListener()
public void valueChanged(ListSelectionEvent evt)
if (!evt.getValueIsAdjusting())
// code here
);
【讨论】:
不完整..(@sharon 在另一个答案中已经注意到的效果)以上是关于查找 JList 的选中项并实时显示的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS判断checkbox/复选框是否选中并实时显示