Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing添加新组件_Java_Swing - Fatal编程技术网

Java Swing添加新组件

Java Swing添加新组件,java,swing,Java,Swing,我需要向JPanel添加dynamicali组件,但如果我只做add(Component),那么组件就不会出现,如果我做了,那么JPanel.revalidate();然后它出现了,但是JPanel会眨眼,我可以让它更精细,而不眨眼吗 嗯,我找到了解决方案,就在添加(组件)之后;我有write component.repaint();这是可行的,但现在窗口大小调整还有另一个问题,若我调整窗口大小,那个么所有添加的组件都会消失 在初始化时添加组件并隐藏它们,使它们在需要时可见,这可能是一个更好的主

我需要向JPanel添加dynamicali组件,但如果我只做add(Component),那么组件就不会出现,如果我做了,那么JPanel.revalidate();然后它出现了,但是JPanel会眨眼,我可以让它更精细,而不眨眼吗


嗯,我找到了解决方案,就在添加(组件)之后;我有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管理者不支持稍后添加组件,其他的执行很多可能解释闪烁的处理。