Java JFrame执行时间添加JPanel

Java JFrame执行时间添加JPanel,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我正在使用JFrame以以下方式动态添加JPanel实例: private void addBox(int x, int y){ JPanel panel = new JPanel(); panel.setBackground(Color.RED); panel.setSize(10, 10); panel.setVisible(true); panel.setLocation(x, y); this.getContentPane().add(panel); } 问题是,当我使用a

我正在使用
JFrame
以以下方式动态添加
JPanel
实例:

private void addBox(int x, int y){
 JPanel panel = new JPanel();
 panel.setBackground(Color.RED);
 panel.setSize(10, 10);
 panel.setVisible(true);
 panel.setLocation(x, y);
 this.getContentPane().add(panel);
}
问题是,当我使用
addBox
方法时,
JPanel
实例不会出现在
JFrame
中。只有这样我才能看到我需要手动调整窗口大小的框


注意:我尝试使用
this.pack(),但这不起作用。

对GUI进行此类结构更改后,需要调用
revalidate()
repaint()

请注意,
setSize
setLocation
最好由布局管理器处理

相关链接:

这个例子可能会有所帮助

private void addBox(int x, int y){
   JPanel panel = new JPanel();
   panel.setBackground(Color.RED);
   add(panel);
   //If there isn't another JPanel, then this way you'll occupy 
   //the whole JFrame area; by defalut, JFrame has BorderLayout,
   //and only one JComponent can occupy the central area 
   revalidate();
   repaint();
}

这些盒子的用途是什么

如果它们纯粹是可视的,并且您不打算向它们添加组件,那么最好定义一个
类(或使用a),并在
paintComponent()时绘制或填充它们

或者,将它们绘制到
buffereImage
Graphics
对象,并将图像添加到
JLabel
,如图所示


我应该如何使用布局管理器处理尺寸和位置?这取决于您希望组件在框架中的布局方式。如果希望框具有位置
x,y
,则应创建自定义布局管理器,将内容窗格设置为使用此管理器,并在添加面板时将x和y传递给布局管理器。例如,Google for java custom layout manager。你怎么知道他没有做过
getContentPane().setLayout(null)
?@aioobe 1)只有在存在
setLayout(null)
的情况下才是,2)没有
setSize
setLocation
的情况下才是,因为pretty ignored使用了LayoutManager,并且在所有情况下都有效……而且在所有情况下都有效——嗯,传递给
setSize
的值将被任何存在的布局管理器覆盖(即,只有在组件需要“重新布局”之前才会被使用)。也许这就是你想说的;-)