19

我在 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

4

4 回答 4

27

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

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) {
    if(evt.getSource()==jButtonClear) {
        DefaultListModel listModel = (DefaultListModel) jList1.getModel();
        listModel.removeAllElements();
    }
}
于 2012-11-28T04:50:15.480 回答
8

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

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"});
    }
}
于 2012-11-28T04:48:10.607 回答
4

试试这个:

DefaultListModel model = new DefaultListModel();
model.clear();
jList1.setModel(model);
于 2017-10-19T22:56:55.790 回答
1

试试这个:

DefaultListModel listmodel=new DefaultListModel();

JList.setModel(listmodel);
于 2020-11-19T23:06:17.237 回答