查找 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 的选中项并实时显示的主要内容,如果未能解决你的问题,请参考以下文章

Java JList 滚动到所选项目

angular实时显示checkbox被选中的元素

AngularJS判断checkbox/复选框是否选中并实时显示

AngularJS判断checkbox/复选框是否选中并实时显示

Swing组件

Emacs如何在当前verilog文件中根据选中的文本快速查找并高亮显示