我有这段代码,当按下label
时,应删除button
:
final JLabel label = new JLabel("Label text");
rightPanel.add(label);
final JButton remove = new JButton("Remove label");
leftPanel.add(remove);
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
rightPanel.remove(label);
}
});
但是当我点击button
时,它不会删除标签文字。只有当我调整窗口大小(例如将其设置为全屏)时,标签文本才会消失。
答案 0 :(得分:6)
通过camickr提出的前一个here答案,您需要执行以下操作:
代码将是(假设使用JPanel):
panel.remove(...);
panel.revalidate();
panel.repaint(); // sometimes needed
您需要删除该组件,然后告诉面板布局其余组件。
答案 1 :(得分:1)
也许不是你的问题的答案,但我认为有用的建议:只在绝对必要时添加/删除组件。如果您发挥创意,您会发现通常有比添加/删除组件更好的解决方案。例如,不要删除JButton
,而应考虑禁用它。
在您的情况下,您可以随时label.setText("")
。这样您就不需要revalidate()
和repaint()
。
我很少在代码中调用revalidate()
和repaint()
。我认为更新现有组件比删除/添加它们更好。