2010-06-19 64 views
1

我需要添加dynamicaly组件到JPanel,但如果我只是添加(组件),那么组件不会出现,如果我使然后JPanel.revalidate();那么它就会出现,但JPanel闪烁,我可以使它更加美好,而不闪烁?Swing添加新组件

嗯,我已经找到解决方案,只是在添加(组件)后;我写了component.repaint();它的工作原理,但现在有另一个窗口调整大小的问题,如果我调整窗口的大小,然后所有我添加的组件disableard !!!

+0

你调整你的组件只加一次一个更小或更大的尺寸? – Gordon 2010-06-19 15:22:43

+1

考虑发布一个显示问题的简短示例:http://sscce.org/ – trashgod 2010-06-19 16:48:19

+0

您使用的是什么LayoutManager?一些LayoutManagers稍后不支持添加组件;其他人会进行大量的处理,这可能会解释眨眼。 – jfpoilpret 2010-06-20 11:25:27

回答

3

这是基本的,但你应该确保每个组件是

1)从美国东部时间增加(见SwingUtilities.invokeLater()

2)每个实例

0

在初始化时添加组件并隐藏它们,在需要时使它们可见,可能是一个更好的主意。使用方法Component.setVisible(boolean b)这样显示和隐藏组件。

编辑:

我只是想在这里我添加随机分量的主JFrame的一个简单的测试类,它工作得很好。

请尝试拨打JFrame.pack()以下JPanel.revalidate()

如果这没有什么区别,你可以发布一些你的代码添加动态组件吗?

另一个编辑:

让你的主要成分落实ComponentListener接口和实现componentResized(ComponentEvent e)方法调用JFrame.pack()。

+1

不,因为在初始化的那一刻,我不会现在将添加哪个组件:( – 2010-06-19 13:35:03

0

如果您添加新组件,则必须致电revalidate

例子:

panel.add(new JButton(...), ...); 
panel.revalidate(); 

确保你从EDT内调用此。

如果还是闪烁看看panel.setDoubleBuffered

希望这会有所帮助,即使您身边的示例代码可以很好地看到您描述的效果。

相关问题