【问题标题】:How to clear a JList in Java?如何清除 Java 中的 JList?
【发布时间】:2012-11-15 21:08:33
【问题描述】:

我在 gui 中有一个 jList,我可以在其中使用添加按钮添加一些数据。 我想添加另一个名为 Clear 的按钮,它将清除所有元素。 我试过这个:

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)
{
    DefaultListModel listmodel=new DefaultListModel();
    jList1 = new JList(listmodel);
    if(evt.getSource()==jButtonClear) JList.setListData(new String[0];
    else listmodel.removeAllElements();
}

当我点击添加按钮时,这将添加元素。

当我点击清除按钮时,这会删除元素。

但是当我重新点击添加按钮时,jList1 中没有任何内容

【问题讨论】:

    标签: java swing jlist defaultlistmodel


    【解决方案1】:

    有很多问题,首先是您的示例充满了编译问题,所以我希望这不是您的实际代码。

    JList 没有名为setListData 的静态方法。我想你的意思是jList1

    每次单击清理按钮时,您都在创建一个新模型和组件...

    private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)
    {
        // ??
        DefaultListModel listmodel=new DefaultListModel();
        jList1 = new JList(listmodel);
        // ??
        if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]);
        else listmodel.removeAllElements();
    }
    

    您已成功取消引用 jList1 所指向的内容,因此无论何时您尝试与它进行交互,您都不再与屏幕上的组件进行交互。

    另一个问题是您向 setListData 方法提供了一个空数组,这基本上就像是在说“请不要在我的列表中添加任何内容”

    试试这样的;

    private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)
    {
        DefaultListModel listmodel = (DefaultListModel)jList1.getModel();
        if(evt.getSource()==jButtonClear) {
            listmodel.removeAllElements();
        } else {
            listModel.addElement(new String[]{"Hello"});
        }
    }
    

    【讨论】:

    • 确定您修改时出现的 copmile 错误,现在当我单击“清除”按钮时,它会添加一些我不知道它来自的新数据......但我试试这个,它会清除所有数据但是当我单击“添加”按钮时,它会添加新数据,但会在清除之前保留旧数据:代码:DefaultListModel listmodel=(DefaultListModel)JList1.getModel(); evt.getSource()==jButtonClear{ listmodel.removeAllElements();
    • 我已经切换了条件(以便 clear 现在调用 removeAll),否则它将添加一个新元素。我偷了你的代码,并没有小心修复它。我不确定这是否与另一个动作事件共享代码。如果没有,请删除 addElement
    • 是的,它是与添加按钮的共享代码,我无法将代码放在这里,因为我是新来的,但这里是添加按钮代码末尾的内容:jList1。重绘(); jPanelVizualisationOptions1.update(); currentPanel.refresh();
    【解决方案2】:

    您不应该仅仅为了从中删除一些项目而重新初始化整个 JList 小部件。相反,您应该操作列表模型,因为对它的更改会“自动”同步回 UI。假设您确实在使用DefaultListModel,这足以实现您的“全部清除”功能:

    private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) {
        if(evt.getSource()==jButtonClear) {
            DefaultListModel listModel = (DefaultListModel) jList1.getModel();
            listModel.removeAllElements();
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      DefaultListModel model = new DefaultListModel();
      model.clear();
      jList1.setModel(model);
      

      【讨论】:

        【解决方案4】:

        试试这个:

        DefaultListModel listmodel=new DefaultListModel();
        
        JList.setModel(listmodel);
        

        【讨论】:

        • 嗨,纳坦兹基。欢迎来到 Stack Overflow 并感谢您的贡献!但是,虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的附加上下文会提高其长期价值。 Tips for Answers。亲切的问候。
        猜你喜欢
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        • 2015-11-16
        • 2012-10-19
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多