如何在绘制之后重新绘制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
- 如何在Maven项目中打包资源?
- Java中inheritance的坏例子是什么?
- java.util.Random.nextInt的实现
- java.lang.ClassNotFoundException:com.microsoft.sqlserver.jdbc.SQLServerDriver
- 如何从Object获取布尔值
- ant的mkdir失败了。 我该如何处理这个错误
- Java中的URL重定向返回302而不是301
- xjc,maven-jaxb2-plugin:cryptic java.lang.NoSuchMethodException:javax.xml.bind.annotation.XmlElementRef.required()
- 转义序列无效(有效转义序列为\ b \ t \ n \ f \ r \“\’\\ \)