簡體   English   中英

Java Jlist不更新

[英]Java Jlist doesn't update

我在一個大gui中有一個JList,我剪掉了所有其他無關的代碼。 我可以初始化列表,但是使用按鈕時無法從列表中添加/刪除項目。 我讀過的所有內容都說要使用DefaultListModel。 然后,當您重新初始化列表時,它將自動更新列表。
我也嘗試過重新調整面板和框架的顏色並重新粉刷,但這也不起作用。

public static void main(String[] args) {
        Play worker=new Play();
        worker.GUI();
    }

    public void GUI(){
        frame=new JFrame();
        mainPanel=new JPanel(new GridBagLayout());
        filePanel=new JPanel(new GridBagLayout());
        allFilePanel=new JPanel(new GridBagLayout());
        fileInputLabel=new JLabel("Enter the directory of the csv file:");
        fileNameField=new JTextField(25);

        readFileButton=new JButton("Read File");
        ReadFileButtonListener buttonListener=new ReadFileButtonListener();
        readFileButton.addActionListener(buttonListener);


        addItem(filePanel,fileInputLabel , 0, 0, 1, 1, GridBagConstraints.CENTER);
        addItem(filePanel,fileNameField , 1, 0, 2, 1, GridBagConstraints.CENTER);
        addItem(filePanel,readFileButton , 3, 0, 1, 1, GridBagConstraints.CENTER);

        allFileLabel=new JLabel("List of all Data");    
        String [] name={"joe"};
        allFileList=new JList<String>(name);
        allFileList.setVisibleRowCount(10);


        addItem(allFilePanel,allFileLabel , 0, 0, 1, 1, GridBagConstraints.CENTER);
        addItem(allFilePanel,allFileList , 0, 1, 1, 1, GridBagConstraints.CENTER);

        addItem(mainPanel, filePanel, 0, 0, 4, 1, GridBagConstraints.CENTER);
        addItem(mainPanel, allFilePanel, 1, 2, 1, 1, GridBagConstraints.CENTER);

        frame.setSize(1000,800);
        frame.add(mainPanel);
        frame.setVisible(true); 
    }

    /**configures the panels
     * @param p
     * @param c
     * @param x
     * @param y
     * @param width
     * @param height
     * @param align
     */
    private void addItem(JPanel p,JComponent c, int x, int y , int width,int height, int align){
        GridBagConstraints gc=new GridBagConstraints();
        gc.gridx=x;
        gc.gridy=y;
        gc.gridwidth=width;
        gc.gridheight=height;
        gc.weightx=100;
        gc.weighty=100;
        gc.insets=new Insets(5,5,5,5);
        gc.fill=GridBagConstraints.NONE;
        p.add(c,gc);
    }

        private class ReadFileButtonListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent arg0) {
            generateAllFileList();
        }

    }

    public void generateAllFileList(){
        DefaultListModel<String> list=new DefaultListModel<String>();
        list.addElement("Fred");
        allFileList=new JList<String>(list);    
    }
}

使用當前代碼,您不會更新JList的列表模型,但正在創建一個新的JList。 然后,您只需將此新的JList分配給allFileList成員即可,該成員對面板沒有影響。 面板上顯示的JList實例不受此操作的影響。

粗略地說(未經測試),它應該像這樣:

public void generateAllFileList(){
    DefaultListModel<String> list = allFileList.getModel();
    list.addElement("Fred"); 
}

(當然,您必須使用默認列表模型而不是數組創建JList)

您不應在每次添加元素時都重新初始化JListDefaultListModel ,否則會丟失舊元素。 保留對DefaltListModel ,只需調用addElement() ,它將通過偵聽由模型生成的事件來自動更新列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM