java - 从 Jlist 获取选定的项目

标签 java swing

我看过很多帖子并尝试了不同的方法来解决这个问题,但我仍然没有得到所选项目的列表。这是我使用的代码。

public List<String> getSelectedDeviceList()
    {
        return list;
    }
    /**
     * Create the frame.
     */
    public JLogicDesign(Frame frame, List<String> listDevices) {

        super();
        setTitle("Device Names");

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setBounds(100, 100, 331, 316);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        jlistModel = new DefaultListModel(); 
        for(String s: listDevices)
        {
            jlistModel.addElement(s);
        }

        final JList jlist = new JList(jlistModel);
        jlist.setVisibleRowCount(5);
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);


        btnOk = new JButton("OK");      
        btnOk.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent evt)
            {                   

                    list = new ArrayList<String>();
                    Object[] values = jlist.getSelectedValues();
                    for(Object o: values)
                    {
                        list.add(o.toString());
                    }               
                dispose();
            }
        });

JList 正在正确填充。当我尝试获取选定的项目时,我得到一个 NPE。

这是我调用上面的类的另一个类

JLogicDesign jld = new JLogicDesign(f,listOfDevices);           

            devices = new ArrayList<String>();
            devices = jld.getSelectedDeviceList();

提前致谢!!

最佳答案

您在这一行得到 NPE:

JLogicDesign jld = new JLogicDesign(f,listOfDevices);
devices = new ArrayList<String>();
devices = jld.getSelectedDeviceList(); // NPE here

因为JLogicDesign中的list变量只有在按下btnOk时才会被初始化。因此,在按下此按钮之前会执行指向的行,这就是它抛出 NPE 的原因。

为了避免 NPE,您应该在 JLogicDesign 中初始化 list。然而它并不能解决问题。您不会得到 NPE,但会得到一个空列表。这是因为 JLogicDesign 不是模态的,即使这些句子正在 Event Dispatch Thread 上执行。 jld.getSelectedDeviceList() 将返回按下 btnOk 之前的列表

如果您在继续之前需要选定的设备,请考虑使用模态 JDialog

关于java - 从 Jlist 获取选定的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597874/

相关文章:

java - 什么样的应用程序使用 getopt "return in order"行为?

java - 如何在不闪烁的情况下使用 HTML 更新 JComponent?

java - Action 监听器不适用于鼠标点击

java - 如何使 JTextField 或 JFormattedTextField 仅在与 REGEX 模式匹配时才接受输入?

java - 增加与 JPanel 顶部的距离

java - JTextField (Swing) 中的希伯来语文本

java - 这是 dtos 中构建器模式的正确用法吗?

java - 在 Jelastic 环境中保护 Tomcat 节点

java - 如何在 Mac 上使用 Java 中的 ssl 证书

java - 如何在 netbeans 6.8 中启动和停止服务器?