添加JPanel的JFrame执行时间

时间:2011-09-15 13:13:39

标签: 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);
}

问题是,当我使用addBox方法时,JPanel实例未显示在JFrame中。我可以看到我需要手动调整窗口大小的唯一方法。

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

3 个答案:

答案 0 :(得分:3)

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

请注意,setSizesetLocation最好由布局管理员处理。

相关链接:

答案 1 :(得分:2)

盒子的目的是什么?

如果它们纯粹是可视化的,并且您不打算向它们添加组件,那么定义Box类(或使用Rectangle2D)并绘制或填充它们会更好时间paintComponent()

或者,将它们绘制到Graphics的{​​{1}}对象,然后将图片添加到BufferedImage,如图here所示。

enter image description here

答案 2 :(得分:1)

此示例显示add/remove/pack可能会有所帮助。

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();
}