一个快速而简单的(?)问题我似乎无法找到答案。 是否可以绘制一个形状(矩形,椭圆等)并添加到JPanel,然后将此JPanel添加到JFrame?我在网上找到的使用Graphics绘图的例子直接将形状添加到JFrame中。例如:
public class DShape extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GREEN);
g.drawRect(10,10,100,30);
}
public class Test {
public static void main(String[] args)
{
JFrame frame = new JFrame();
DShape shape = new DShape();
JPanel panel = new JPanel();
panel.add(shape);
frame.add(panel);
frame.setSize(200,200);
frame.setVisible(true);
}
}
此代码只显示一个空白的JFrame。如果直接将DShape类对象添加到JFrame,将显示绿色矩形。是否可以先将形状添加到JPanel,然后将JPanel添加到JFrame?谢谢。
答案 0 :(得分:0)
使用我在网上找到的图形绘制的示例将形状直接添加到JFrame。
当您直接将面板添加到框架时,内容窗格的默认布局是BorderLayout,因此组件的大小将调整为框架的大小。
是否可以绘制形状(矩形,椭圆等)并添加到JPanel,然后将此JPanel添加到JFrame?
JFrame frame = new JFrame();
DShape shape = new DShape();
JPanel panel = new JPanel();
panel.add(shape);
frame.add(panel);
JPanel
的默认布局管理器是FlowLayout
。 FlowLayout
尊重添加到其中的组件的首选大小。您的组件没有首选大小,因此大小为(0,0),因此无需绘制任何内容。
您需要覆盖getPreferredSize()
面板的DShape
方法,以返回适当的尺寸。
阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。