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

我有一个inheritance自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(); } 

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

编辑:从invalidate更改为revalidate