gpt4 book ai didi

java - JButton 被删除后会在 JPanel 中留下痕迹吗?

转载 作者:行者123 更新时间:2023-12-01 11:44:46 25 4
gpt4 key购买 nike

所以我必须创建一个 JLabel 和一个 JButton,将它们放入 JPanel 中,然后将其全部显示在 >JFrame。单击 JButton 后,必须删除 JButton,并且更改 JLabel 的文本。一切都工作正常,除了一件事:当按钮从 JPanel 中删除时,它仍然留下了自己的痕迹。这是我的代码,您自己尝试一下:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestClass
{
public static void main (String[] args)
{
new TestClass();
}

public TestClass()
{
JPanel jpanel = new JPanel();
JLabel jlabel = new JLabel ("-->");
JButton jbutton = new JButton ("Click here!");

jbutton.addActionListener (new ActionListener()
{
public void actionPerformed (ActionEvent event)
{
jlabel.setText ("Good job!");
jpanel.remove (jbutton);
}
});

jpanel.add (jlabel);
jpanel.add (jbutton);

JFrame jframe = new JFrame ("Test Frame");
jframe.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
jframe.setSize (340, 60);
jframe.setResizable (false);
jframe.add (jpanel);
jframe.setVisible (true);
}
}

关于如何解决这个问题有什么建议吗?谢谢。

最佳答案

当您删除 Swing 组件时,您应该在其容器上调用 revalidate(),然后调用 repaint():

public void actionPerformed(ActionEvent event) {
jlabel.setText("Good job!");
jpanel.remove(jbutton);
jpanel.revalidate();
jpanel.repaint();
}

关于java - JButton 被删除后会在 JPanel 中留下痕迹吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29241045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com