【问题标题】:Find selected item of a JList and display it in real time查找 JList 的选中项并实时显示
【发布时间】:2012-11-27 20:32:40
【问题描述】:

我有一个JList,我在其中显示一些 ID。我想捕获用户单击的 ID 并将其显示在 JLabel 上。

String selected = jlist.getSelectedItem().toString();

上面的代码给了我选择的JList 值。但是这段代码必须放在按钮事件中,当我单击按钮时,它将获取 JList 值并将其分配给JLabel

但是,我想要做的是,只要用户点击JList 的一个项目,就可以实时更新JLabel。 (无需单击按钮来触发操作)

【问题讨论】:

    标签: java swing jlist


    【解决方案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 在另一个答案中已经注意到的效果)
    猜你喜欢
    • 2023-03-21
    • 2012-11-30
    • 2021-04-10
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2015-03-26
    相关资源
    最近更新 更多