我需要添加dynamicaly组件到JPanel,但如果我只是添加(组件),那么组件不会出现,如果我使然后JPanel.revalidate();那么它就会出现,但JPanel闪烁,我可以使它更加美好,而不闪烁?Swing添加新组件
嗯,我已经找到解决方案,只是在添加(组件)后;我写了component.repaint();它的工作原理,但现在有另一个窗口调整大小的问题,如果我调整窗口的大小,然后所有我添加的组件disableard !!!
我需要添加dynamicaly组件到JPanel,但如果我只是添加(组件),那么组件不会出现,如果我使然后JPanel.revalidate();那么它就会出现,但JPanel闪烁,我可以使它更加美好,而不闪烁?Swing添加新组件
嗯,我已经找到解决方案,只是在添加(组件)后;我写了component.repaint();它的工作原理,但现在有另一个窗口调整大小的问题,如果我调整窗口的大小,然后所有我添加的组件disableard !!!
这是基本的,但你应该确保每个组件是
1)从美国东部时间增加(见SwingUtilities.invokeLater()
)
2)每个实例
在初始化时添加组件并隐藏它们,在需要时使它们可见,可能是一个更好的主意。使用方法Component.setVisible(boolean b)
这样显示和隐藏组件。
编辑:
我只是想在这里我添加随机分量的主JFrame的一个简单的测试类,它工作得很好。
请尝试拨打JFrame.pack()
以下JPanel.revalidate()
。
如果这没有什么区别,你可以发布一些你的代码添加动态组件吗?
另一个编辑:
让你的主要成分落实ComponentListener
接口和实现componentResized(ComponentEvent e)
方法调用JFrame.pack()。
不,因为在初始化的那一刻,我不会现在将添加哪个组件:( – 2010-06-19 13:35:03
如果您添加新组件,则必须致电revalidate
。
例子:
panel.add(new JButton(...), ...);
panel.revalidate();
确保你从EDT内调用此。
如果还是闪烁看看panel.setDoubleBuffered
。
希望这会有所帮助,即使您身边的示例代码可以很好地看到您描述的效果。
你调整你的组件只加一次一个更小或更大的尺寸? – Gordon 2010-06-19 15:22:43
考虑发布一个显示问题的简短示例:http://sscce.org/ – trashgod 2010-06-19 16:48:19
您使用的是什么LayoutManager?一些LayoutManagers稍后不支持添加组件;其他人会进行大量的处理,这可能会解释眨眼。 – jfpoilpret 2010-06-20 11:25:27