在JPanel中添加形状

时间:2017-11-25 18:38:50

标签: java swing

一个快速而简单的(?)问题我似乎无法找到答案。 是否可以绘制一个形状(矩形,椭圆等)并添加到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?谢谢。

1 个答案:

答案 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的默认布局管理器是FlowLayoutFlowLayout尊重添加到其中的组件的首选大小。您的组件没有首选大小,因此大小为(0,0),因此无需绘制任何内容。

您需要覆盖getPreferredSize()面板的DShape方法,以返回适当的尺寸。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。