簡體   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