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
的值将被任何存在的布局管理器覆盖(即,只有在组件需要“重新布局”之前才会被使用)。也许这就是你想说的;-)