我正在以下列方式动态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();
,但这不起作用。
答案 0 :(得分:3)
在对GUI进行此类结构更改后,您需要调用revalidate()
和repaint()
。
请注意,setSize
和setLocation
最好由布局管理员处理。
相关链接:
答案 1 :(得分:2)
盒子的目的是什么?
如果它们纯粹是可视化的,并且您不打算向它们添加组件,那么定义Box
类(或使用Rectangle2D)并绘制或填充它们会更好时间paintComponent()
。
或者,将它们绘制到Graphics
的{{1}}对象,然后将图片添加到BufferedImage
,如图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();
}