我有一个小型 Java 桌面应用程序,需要能够通过分别单击“+”和“-”按钮来动态添加和删除字段。我已经通过调用 revalidate() 然后在所有父容器上调用 repaint() 一直到 ActionListener 中的 JFrame 来实现它。
这似乎成功了,但有时它不起作用并且 JPanel 无法正确调整大小。这种情况很少发生,而且似乎是随机发生的,让我相信这可能是一个并发问题。我已经尝试从事件分派(dispatch)线程启动父容器,但这并没有解决问题。
这实际上是一个并发问题还是我找错了树?任何人都知道发生了什么以及如何解决它?
非常感谢
-SwingNoob
最佳答案
这不是对 OP 问题 nice example 的回答, OP 的问题可能与 LayoutManager 和 OP 代码中的未知内容有关
1/如果你添加一个新的 JComponent 到 Container 那么你必须调用
validate();
repaint(); //lay with LayoutManager required that
2/如果从容器中删除然后添加一个 JComponents,那么您必须调用
revalidate();
repaint(); // lay with LayoutManager required that
3/看起来 revalidate 也覆盖了 validate,
关于Java Swing revalidate() 和 repaint() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6405383/