在Java中删除标签

在Java中删除标签,java,swing,jpanel,jlabel,Java,Swing,Jpanel,Jlabel,我有这段代码,当按下按钮时,它应该会移除标签: 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(Ac

我有这段代码,当按下
按钮
时,它应该会移除
标签

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

但是,当我单击
按钮时,它不会删除标签文本。只有当我调整窗口大小时(例如,将其设置为全屏),标签文本才会消失。

根据camickr提出的上一个答案,您需要执行以下操作:

代码是(假设使用JPanel):


你需要删除这个组件,然后告诉面板来布局剩余的组件。

也许不是你的问题的答案,但是我认为有用的建议:只有在绝对必要的时候才添加/删除组件。如果你有创意,你会发现通常有比添加/删除组件更好的解决方案。例如,不要删除<代码> JButton < /代码>,而是考虑禁用它。

在您的情况下,您总是可以只执行
label.setText(“”
)。这样,您就不需要
revalidate()
repaint()


我很少在代码中调用
revalidate()
repaint()
。我认为更新现有组件比删除/添加它们更好。

你需要处理你用我的宠物猴子在回程机器中收回的JFrame o JDialog,但是如果内存对我有用,在AWT和Swing中,你必须在对UI进行更改后以某种方式将其标记为脏的,或者至少以某种方式表示窗户应该重新喷漆。调整窗口的大小可以做到这一点。我似乎还记得重新绘制是一个建议,当您调用该方法时,它并没有正确发生。希望你能用谷歌搜索一下,找到你需要的东西。@RamonBoza你是说公共类中的extends JFrame吗?看一看-一个答案建议告诉框架
revalidate()
.repaint a component())^这样就可以了。基本上,模型是由控制器更新(删除按钮)的。但必须向视图发出模型已更改的信号,以便更新视口。这是一个非常简短的模型视图控制器应该如何工作的简历。Swing是在考虑MVC范式的情况下构建的。
panel.remove(...);
panel.revalidate();
panel.repaint(); // sometimes needed