如何在Java中清除JList?

2022-09-02 03:08:10

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

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


答案 1

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

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

答案 2

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

JList没有名为 的静态方法。我想你的意思是相反。setListDatajList1

每次单击“清洁”按钮时,您都在创建新模型和组件...

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"});
    }
}

推荐