java - 无法移除组件并重新绘制

标签 java swing components repaint

我遇到了这个问题。我想从 JPanel 中删除所有现有组件,并在单击按钮后添加另一个新组件。现在,如果我单击一个按钮,它会在左上角添加相同的按钮,但不再可单击。

public class MainPanel extends JPanel implements ActionListener{

private Image backgroundImage;
private Image startScreen;
private boolean gameStarted = false;
private SingleplayerButton button1;
private MultiplayerButton button2;

public MainPanel() {
    String imgUrl = "graphics/";
    try {
        startScreen = ImageIO.read(new File(imgUrl+"start.png"));
    } catch (IOException e) {
        Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, null, e);
    }
    backgroundImage = startScreen;
    this.setLayout(null);
    button1 = new SingleplayerButton(this);
    button1.addActionListener(this);
    this.add(button1);

    button2 = new MultiplayerButton(this);
    button2.addActionListener(this);
    this.add(button2);
}


@Override
protected void paintComponent(Graphics g) {
    if(gameStarted == false) {
        g.drawImage(backgroundImage, 0, 0, null);
    } else {
        this.removeAll();
        this.setBackground(Color.WHITE);
        this.revalidate();
    }
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource() == button1) {
        gameStarted = true;
        this.repaint();
        // something more
    } else if(e.getSource() == button2) {
        gameStarted = true;
        this.repaint();
        // something more
    } 
}

最佳答案

从可见 GUI 添加/删除组件时的基本代码是:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

上面的代码应该在 ActionListener 中完成,而不是在 PaintComponent() 方法中完成。绘画方法仅用于绘画。

关于java - 无法移除组件并重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21243786/

相关文章:

java - 尝试从网络摄像头捕获图像时出现 NullPointerException

java - 用Java制作一个倒计时器程序,最终会关闭/重新启动或 sleep 你的机器

Java PaintComponent 无缘无故地绘制顶部 GUI 面板的副本

java - wait() 和 sleep() 有问题吗?

delphi - 在 Delphi 2009 中显示 PDF 文件的最佳方式是什么

java - 检查 Java 中的 MySQL DB 中是否存在值?

java - 如何使用 Gradle 添加默认 JVM 参数

java - 覆盖 Java 中的抽象方法

c++ - MFC 扩展库(GUI/控件)推荐

Angular 2将字符串参数传递给组件