【问题标题】:How to select an item from a JList without using a button?如何在不使用按钮的情况下从 JList 中选择一个项目?
【发布时间】:2015-05-29 20:49:40
【问题描述】:

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

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

【问题讨论】:

    标签: java swing jlist


    【解决方案1】:

    这是我的代码:

    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 中选择某些内容时需要执行的代码。

    【讨论】:

    • 在添加 ActionListener 对象时,您会使用术语 ActionListener,这也是您的代码不会做的事情。您应该说您正在向 JList 添加一个 ListSelectionListener,以便程序将在选择状态的任何更改时收到通知。
    • 人们倾向于逐字复制 Stack Overflow 的答案。如果这段代码没有忽略泛型,正确使用 AWT 事件调度线程,并且没有将 BorderLayout 约束与 FlowLayout 一起使用,我会对这个答案感觉更好。
    【解决方案2】:

    JList JavaDoc 有这个很棒的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-25
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多