Swing添加新组件

时间:2010-06-19 12:17:06

标签: java swing

我需要向JPanel添加dynamicaly组件,但是如果我只添加(组件)那么组件不会出现,如果我生成然后JPanel.revalidate();然后就出现了,但JPanel眨了眨眼,我可以让它变得更好,而不会眨眼吗?

嗯,我已经找到了解决方案,就在添加(组件)之后;我写了component.repaint();它有效,但现在还有另一个窗口调整大小的问题,如果我调整窗口大小,那么我所有添加的组件都不用了!

3 个答案:

答案 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

希望有所帮助,即使您身边的示例代码能够真正看到您所描述的效果。