Java Swing添加新组件
我需要向JPanel添加dynamicali组件,但如果我只做add(Component),那么组件就不会出现,如果我做了,那么JPanel.revalidate();然后它出现了,但是JPanel会眨眼,我可以让它更精细,而不眨眼吗Java Swing添加新组件,java,swing,Java,Swing,我需要向JPanel添加dynamicali组件,但如果我只做add(Component),那么组件就不会出现,如果我做了,那么JPanel.revalidate();然后它出现了,但是JPanel会眨眼,我可以让它更精细,而不眨眼吗 嗯,我找到了解决方案,就在添加(组件)之后;我有write component.repaint();这是可行的,但现在窗口大小调整还有另一个问题,若我调整窗口大小,那个么所有添加的组件都会消失 在初始化时添加组件并隐藏它们,使它们在需要时可见,这可能是一个更好的主
嗯,我找到了解决方案,就在添加(组件)之后;我有write component.repaint();这是可行的,但现在窗口大小调整还有另一个问题,若我调整窗口大小,那个么所有添加的组件都会消失 在初始化时添加组件并隐藏它们,使它们在需要时可见,这可能是一个更好的主意 使用方法
Component.setVisible(布尔b)
显示和隐藏组件
编辑:
我只是尝试了一个简单的测试类,我在主JFrame中添加了随机组件,效果很好
尝试在JPanel.revalidate()之后调用JFrame.pack()
如果这没有什么区别,您可以在添加动态组件的地方发布一些代码吗
另一次编辑:
让您的主组件实现ComponentListener
接口,并实现ComponentResistized(ComponentEvent e)
方法来调用JFrame.pack()。如果添加新组件,则必须调用revalidate
例如:
panel.add(new JButton(...), ...);
panel.revalidate();
确保您是从EDT内部拨打此电话
如果仍然闪烁,请查看面板。setDoubleBuffered
希望这对您有所帮助,尽管您这边的示例代码很乐意看到您所描述的效果。这是基本的,但您应该确保每个组件都是可用的
1) 从EDT中添加(请参见SwingUtilities.invokeLater()
)
2) 每个实例只添加一次否,因为在初始化时,我现在不知道将添加哪个组件:(你是不是把你的组件缩小到一个更小的或更大的尺寸?考虑一下一个简短的例子来说明这个问题:你使用LayOutMault?一些LayStand管理者不支持稍后添加组件,其他的执行很多可能解释闪烁的处理。