繁体   English   中英

摇摆添加新组件

[英]Swing add new Component

我需要向JPanel添加dynamicaly组件,但是如果我仅创建add(Component),则组件不会出现,如果我创建,则JPanel.revalidate(); 然后出现,但JPanel闪烁,是否可以使其更精细而不闪烁?

嗯,我在add(component)之后找到了解决方案; 我写了component.repaint(); 并且它可以工作,但是现在窗口调整大小还有另一个问题,如果我调整窗口的大小,那么所有添加的组件都会消失!!!

这是基本的操作,但是您应该确保每个组件都是

1)从EDT添加(请参阅SwingUtilities.invokeLater()

2)每个实例仅添加一次

在初始化时添加组件并隐藏它们,使它们在需要时可见是一个更好的主意。

使用Component.setVisible(boolean b)以便显示和隐藏组件。

编辑:

我只是尝试了一个简单的测试类,在其中我向主JFrame添加了随机组件,并且效果很好。

尝试在JFrame.pack()之后调用JFrame.pack() JPanel.revalidate()

如果这没有什么不同,您可以在添加动态组件的地方张贴一些代码吗?

另一个编辑:

使您的主要组件实现ComponentListener接口,并实现componentResized(ComponentEvent e)方法以调用JFrame.pack()。

如果添加新组件,则必须调用revalidate

例:

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

确保您是从EDT内部调用此功能的。

如果仍然闪烁,请查看panel.setDoubleBuffered

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM