我需要向JPanel添加dynamicaly组件,但是如果我只添加(组件)那么组件不会出现,如果我生成然后JPanel.revalidate();然后就出现了,但JPanel眨了眨眼,我可以让它变得更好,而不会眨眼吗?
嗯,我已经找到了解决方案,就在添加(组件)之后;我写了component.repaint();它有效,但现在还有另一个窗口调整大小的问题,如果我调整窗口大小,那么我所有添加的组件都不用了!
答案 0 :(得分:3)
这是基本的,但您应该确保每个组件都是
1)从EDT添加(见SwingUtilities.invokeLater()
)
2)每个实例只添加一次
答案 1 :(得分:0)
最好在初始化时添加组件并隐藏它们,使它们在需要时可见。
使用方法Component.setVisible(boolean b)
,以显示和隐藏组件。
修改强>
我刚刚尝试了一个简单的测试类,我将随机组件添加到主JFrame中,并且工作正常。
尝试在JFrame.pack()
后调用JPanel.revalidate()
。
如果这没有任何区别,你可以在添加动态组件的地方发布一些代码吗?
另一个编辑:
使您的主要组件实现ComponentListener
接口并实现componentResized(ComponentEvent e)
方法以调用JFrame.pack()。
答案 2 :(得分:0)
如果添加新组件,则必须调用revalidate
。
示例:
panel.add(new JButton(...), ...);
panel.revalidate();
确保你在EDT内打电话。
如果仍然闪烁,请查看panel.setDoubleBuffered
。
希望有所帮助,即使您身边的示例代码能够真正看到您所描述的效果。