Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找JList的选定项目并实时显示_Java_Swing_Jlist - Fatal编程技术网

Java 查找JList的选定项目并实时显示

Java 查找JList的选定项目并实时显示,java,swing,jlist,Java,Swing,Jlist,我有一个JList,其中显示了一些ID。我想捕获用户单击的ID并在JLabel上显示它 String selected = jlist.getSelectedItem().toString(); 上面的代码给出了所选的JList值。但此代码必须放在按钮事件中,当我单击按钮时,它将获得JList值并将其分配给JLabel String selected = jlist.getSelectedItem().toString(); 但是,我想做的是,只要用户单击JList中的一项,就可以实时更新J

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

String selected = jlist.getSelectedItem().toString();
上面的代码给出了所选的
JList
值。但此代码必须放在按钮事件中,当我单击按钮时,它将获得JList值并将其分配给
JLabel

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

但是,我想做的是,只要用户单击
JList
中的一项,就可以实时更新
JLabel
。(无需单击按钮即可启动操作)

为什么不在
JList
上添加一个
ListSelectionListener
,然后将上面的代码添加到其中呢

我假设您已经知道如何根据您的问题在JButtons上创建侦听器,因此您只需调整它以创建一个
ListSelectionListener
,然后使用
JList.addListSelectionListener(myListener)将侦听器分配给您的
JList

有一个很好的教程可以让你开始学习,或者参考

你应该瞄准这样的目标

jlist.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent event) {
        if (!event.getValueIsAdjusting()){
            JList source = (JList)event.getSource();
            String selected = source.getSelectedValue().toString();
        }
    }
});

使用
ListSelectionListener

JList list = new JList(...);
list.addListSelectionListener(new ListSelectionListener() {
  public void valueChanged(ListSelectionEvent evt) {
    if (!evt.getValueIsAdjusting()) {
      // code here
    }
  }
});

下面是一个使用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这对我来说确实是个好建议。我将用我进一步的回答来概括它。谢谢lot@vini当我将Jlist值打印到控制台时,打印了两次。那么你有什么线索知道它为什么被调用两次吗?@sharonHwk所有的anwers都有一个小错误:查看事件。getValueIsAdjusting属性-只有在错误不完整的情况下才执行你的操作。。(@sharon在另一个答案中已经注意到了这一点)不完整。。(另一个答案中,@sharon已经注意到了这一点)