JPanel不显示图纸

时间:2009-10-09 02:34:12

标签: java drawing jpanel

我在JPanel上显示绘图时遇到问题。我创建了三个相互链接的类,如下所示。我想知道为什么这段代码没有显示我的绘图。

c.add(pDraw);
pDraw.add(draw);

1)MAIN

public class mainPage {
    public static void main(String[]args){
      JFrame appFrame = new Frame();
      appFrame.setVisible(true); 
      appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

2)JFRAME

 public class Frame extends JFrame implements ActionListener{

    private drawingBoard draw;  

    public Frame (){
         draw = new drawingBoard(); //generate pattern
         GridBagLayout m = new GridBagLayout();
         Container c = (Container)getContentPane();
         c.setLayout (m);
         GridBagConstraints con;
         .......

         JPanel pDraw = new JPanel();       
         pDraw.setPreferredSize(new Dimension(500,500));
             .....  
         c.add(pDraw);
         pDraw.add(draw); // Call other class for drawing

         .....
         setResizable(false); 
         pack();
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
         setVisible(true);
    }
}

3)JPANEL

public class drawingBoard extends JPanel {
      .....
      public void paint(Graphics g) {
      ......
      }
   }

4 个答案:

答案 0 :(得分:3)

这是答案,我忘了设置drawingBoard JPanel的大小: - )

 public class drawingBoard extends JPanel {
        public drawingBoard(){
        setPreferredSize(new Dimension (500,500));

        }
    }

答案 1 :(得分:1)

对您的代码进行一行更改。

您所要做的就是阅读Swing tutorial on "Custom Painting"以弄清楚您做错了什么。

这是连续第三个问题,如果你不愿阅读本教程,可以在几分钟内解决。

你仍然没有学会如何发布SSCCE,所以我不打算给你答案。

答案 2 :(得分:0)

虽然在没有看到GridBagConstraints或paint()方法的情况下调试代码有点困难,但我会告诉你,覆盖paintComponent()方法而不是paint()方法通常会更好。在drawingBoard中,尝试这样做而不是覆盖paint():

public void paintComponent(Graphics g) {
    super.paintComponent(g); //optional
    ...
}

这可能会有所作为。有关详细信息,请check out this article from Java

此外,作为免费赠品,您可能不需要在main()方法和Frame的构造函数中执行setVisible()和setDefaultCloseOperation()。

答案 3 :(得分:0)

我同意Ben Torell在他的帖子中提出的所有观点 - 加上一些额外的故障排除建议。

试试这个 -

public class DrawingBoardTest extends JFrame {
    public DrawingBoardTest() {
        getContentPane().add(new drawingBoard(), BorderLayout.CENTER);
    }
    public static void main(String[] args ) {
        JFrame f = new DrawingBoardTest();
        f.setSize(500, 500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

如果drawingPanel出现,那么你的GridBagLayout就会出现问题,或者在drawingPanel上设置的首选大小不足以显示图形,或者将drawingBoard添加到pDraw(据我所见,从代码中,并不是真的需要......)。

JFrame内容窗格的默认布局是BorderLayout,它将为中心组件提供所有空间,这是我在我发布的代码中放置drawingBoard的地方。

JPanel的默认布局是FlowLayout,它只会为组件提供首选大小。我看到你在pDraw上设置首选大小,但在原始代码中没有在drawingBoard上设置 - drawingBoard可能有一个首选的大小设置太小而无法显示图形。

如果drawingPanel没有出现 - 那么你的drawingPanel paint()方法就会出现问题。