我有一个继承自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();
}
答案 0 :(得分:16)
尝试拨打somePanel.revalidate()
。这将告诉AWT你已经改变了组件树。
编辑:从invalidate
更改为revalidate