2

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

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

1) 主要

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

2) 框架

 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) 面板

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

4 回答 4

3

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

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

        }
    }
于 2009-10-09T12:13:13.580 回答
1

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

您所要做的就是阅读有关“自定义绘画”的 Swing 教程,以找出您做错了什么。

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

而且您还没有学会如何发布SSCCE,所以我不打算用勺子喂给您答案。

于 2009-10-09T03:31:45.047 回答
0

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

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

这可能会有所作为。有关更多信息,请查看 Java 中的这篇文章

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

于 2009-10-09T03:16:08.137 回答
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,它将为中心组件提供所有空间,这是我在发布的代码中放置绘图板的位置。

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

如果drawingPanel 没有出现——那么这是你的drawingPanel paint() 方法中的一个问题。

于 2009-10-09T03:40:00.600 回答