如何从面板中删除多个标签?

时间:2011-11-30 10:41:24

标签: java swing user-interface jlist jlabel

参考:How do I display something I enter in a JOptionPane on the JFrame?

我已经创建了一个JList,它也输出了我输入的内容,并在JPanel上显示为JLabel,就像我使用链接所做的那样。但是,这次如何删除相应的JLabel?非常感谢任何有帮助的人!

编辑: 我想要做的是当我单击JList中的删除按钮时,面板上的标签也将被删除。

4 个答案:

答案 0 :(得分:1)

执行以下操作:

String stringToRemove = "CATS";
jLabel.setText(jLabel.getText().replace(stringToRemove, "");

如果您说JLabel设置为:"CATS DOGCATS APPLE",则在删除" DOG APPLE"字符串

后会更改为CATS

答案 1 :(得分:1)

1)放置JPopupMenu而不是JOptionPane

2)将List Selection Listener添加到JList,设置选择模型

3)检查SelectedIndex> -1,如果从removeItem(s)JList

传递ListModel

4)最好将JList Items添加到DefaultListModel

答案 2 :(得分:1)

我会添加一个答案来提供一些代码,因为我觉得我的评论被误解了。

首先,如果没有必要,请不要对每个列表条目使用标签,而是使用一个标签,其内容是列表条目的串联。然后在列表更改时更新标签的文本。

基本上,你有一个像这样的方法:

private void updateLabel() {
   StringBuilder text = new StringBuilder();
   //this assumes listModel is a DefaultListModel and doesn't contain null values
   //adapt for other list models and add any necessary checks
   for( Object entry : listModel.toArray() ) {
     text.append( entry.toString()).append(" ");
   }
   label.setText( text.toString() );
}

然后为列表模型添加一个监听器:

listModel.addListDataListener( new ListDataListener() {      
  public void intervalAdded(ListDataEvent e) {
     updateLabel();
  }

  public void intervalRemoved(ListDataEvent e) {
     updateLabel();
  }

  public void contentsChanged(ListDataEvent e) {
     updateLabel();
  }
});

因此,当您更改列表中的内容时,标签会自动更新。

答案 3 :(得分:0)

我认为你正在寻找一个ListModel。实施后,您可以轻松添加/删除项目。

例如:

// adding
listModel = new DefaultListModel();
listModel.addElement("Jane Doe");

list = new JList(listModel);

// removing (the selected item)
int index = list.getSelectedIndex();
listModel.remove(index);

有关详细信息,请参阅Tutorial