繁体   English   中英

从Jlist获取选定的项目

[英]Getting selected Items from Jlist

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

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

由于list中的变量JLogicDesign时才初始化btnOk被按下。 因此,在按下此按钮之前执行了指针,这就是它引发NPE的原因。

为了避免NPE,您应该在JLogicDesign初始化list 但是,它不能解决问题。 您不会得到NPE,但会得到一个空列表。 这是因为JLogicDesign不是模态的,即使这些语句在事件调度线程上执行, jld.getSelectedDeviceList()也会按下btnOk 之前返回list

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM