【发布时间】:2020-05-07 16:04:16
【问题描述】:
有点不好意思问这个问题,因为好像有点明显,但是我一个人找不到解决办法。
我正在用 Java 编写一个小应用程序,但在“重绘”我的挥杆组件时遇到了一些问题。基本上,我希望我的JFrame 在事件发生时更新。我设法在下面的代码中重现了这个问题。这段代码应该显示两个按钮(它确实如此),并在您单击第一个按钮时将它们替换为第三个按钮(它没有)。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Example extends JFrame implements ActionListener {
private JButton button = new JButton("Button 1");
private JButton button2 = new JButton("Button 2");
private JButton button3 = new JButton("Button 3");
private JPanel buttons = new JPanel();
public void init() {
this.setVisible(true);
this.setSize(500,500);
buttons.add(button);
buttons.add(button2);
this.add(buttons);
this.button.addActionListener(this);
}
public void update() {
this.removeAll();
buttons.add(button3);
this.revalidate();
}
public static void main(String[] args) {
Example ex = new Example();
ex.init();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button) {
update();
}
}
}
我很确定我在 update() 方法中做错了什么。实际上,我很难理解removeAll()、revalidate()、repaint() 等的工作原理,我想这就是问题所在。我尝试在buttons 面板上调用相同的方法,它几乎可以工作,但我仍然有一个图形错误,我想对所有容器都这样做。我也尝试在this.getContentPane() 上调用这些方法,但它不起作用。
有人可以帮我解决吗?
【问题讨论】:
标签: java swing jbutton actionlistener repaint