如何在绘制之后重新绘制JPanel?

时间:2010-12-08 21:47:35

标签: java swing jpanel

我有一个继承自JPanel的组件,我在其上绘制一个网格。现在我有一个JComboBox,我希望用户能够在这里选择网格大小,然后按一个按钮使网格更改(重新绘制网格)。

问题在于它绘制了初始网格,但是一旦用户从JComboBox中选择网格大小并单击按钮,就不会发生任何事情。我必须最小化表单,然后再次恢复以查看更改。

任何想法?该守则如下。

组件:

public class Board extends JPanel {
    ...

    protected void paintComponent(Graphics og) {
        super.paintComponent(og);
        ...
        }
    }    
}

主类

public class Main extends javax.swing.JFrame {
...

public Main() {                                   //This works great.
    board = new Board( ... );
    somePanel.add(board, BorderLayout.CENTER);

}

public void someButtonActionPerformed(Event e) { //This is not working

    somePanel.remove(board);
    board = new Board( ... );
    somePanel.add(board);
    somePanel.invalidate()
    board.repaint();
}

1 个答案:

答案 0 :(得分:16)

尝试拨打somePanel.revalidate()。这将告诉AWT你已经改变了组件树。

编辑:从invalidate更改为revalidate