Java 画完画后如何重新粉刷?
我有一个从JPanel继承的组件,我在上面画了一个网格。现在我有了一个JComboBox,我希望用户能够在这里选择网格大小,然后按下按钮更改网格(重新绘制网格) 问题是它绘制了初始网格,但一旦用户从JComboBox中选择网格大小并单击按钮,就不会发生任何事情。我必须最小化表单,然后再次恢复它以查看更改 有什么想法吗?代码如下 组成部分: 主类Java 画完画后如何重新粉刷?,java,swing,jpanel,Java,Swing,Jpanel,我有一个从JPanel继承的组件,我在上面画了一个网格。现在我有了一个JComboBox,我希望用户能够在这里选择网格大小,然后按下按钮更改网格(重新绘制网格) 问题是它绘制了初始网格,但一旦用户从JComboBox中选择网格大小并单击按钮,就不会发生任何事情。我必须最小化表单,然后再次恢复它以查看更改 有什么想法吗?代码如下 组成部分: 主类 尝试调用somePanel.revalidate()。这将告诉AWT您已经更改了组件树 编辑:从invalidate更改为revalidate谢谢您的回
尝试调用
somePanel.revalidate()
。这将告诉AWT您已经更改了组件树
编辑:从
invalidate
更改为revalidate
谢谢您的回答。我已经试过了,但没有成功:(J.您可能想更新问题中的代码以显示这一点。someButtonActionPerformed
方法是否实际被调用?您是否添加了系统.out.println
以进行检查?哎呀!我的回答中是说重新验证
,而不是无效
。这可能是问题所在。这正是问题所在!谢谢你,我的朋友,你非常有用。J.没问题。我建议你阅读一下无效
,验证
和重新验证
,如果你还没有读过的话。它们可能很难正确。
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();
}