JButton 在被删除后在 JPanel 中留下工件?
JButton leaving artifacts in JPanel after being removed?
所以我必须创建一个JLabel
和一个JButton
,将它们放入一个JPanel
,然后将它们全部显示在一个JFrame
中。必须删除 JButton
,并且 JLabel
的文本会在单击 JButton
时更改。一切正常,除了一件事:当按钮从 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);
}
}
关于如何解决这个问题有什么建议吗?谢谢。
试试这个:
jlabel.setText ("Good job!");
jbutton.setVisible (false);
jpanel.remove (jbutton);
jpanel.repaint();
这会在移除面板后重新绘制面板,并关闭可见性。
当您删除 Swing 组件时,您应该在其容器上调用 revalidate()
然后 repaint()
:
public void actionPerformed(ActionEvent event) {
jlabel.setText("Good job!");
jpanel.remove(jbutton);
jpanel.revalidate();
jpanel.repaint();
}
所以我必须创建一个JLabel
和一个JButton
,将它们放入一个JPanel
,然后将它们全部显示在一个JFrame
中。必须删除 JButton
,并且 JLabel
的文本会在单击 JButton
时更改。一切正常,除了一件事:当按钮从 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);
}
}
关于如何解决这个问题有什么建议吗?谢谢。
试试这个:
jlabel.setText ("Good job!");
jbutton.setVisible (false);
jpanel.remove (jbutton);
jpanel.repaint();
这会在移除面板后重新绘制面板,并关闭可见性。
当您删除 Swing 组件时,您应该在其容器上调用 revalidate()
然后 repaint()
:
public void actionPerformed(ActionEvent event) {
jlabel.setText("Good job!");
jpanel.remove(jbutton);
jpanel.revalidate();
jpanel.repaint();
}