无法直接在JFrame上绘制

时间:2012-04-24 15:45:40

标签: java swing paint

我有一个用Java创建绘图程序的任务。我设法创造了一些但不完全符合我想要的东西。

我的问题是我无法从IDE提供的选项中在IDE(NetBeans 7.0.1)中创建JFrame,并正确调用绘图类。

更具体一点的是,我想按一个面板上的按钮(例如Panel1)并在Panel2中绘制相同的框架。

这就是班级的召唤:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    PaintFlower102 f = new PaintFlower102();
}

课程的一部分:

    super("Drag to Paint");
    getContentPane().add(new Label ("Click and Drag"),BorderLayout.SOUTH);
    // add(new JButton("Brush 20"),BorderLayout.NORTH);
    addMouseMotionListener( new MouseMotionAdapter() {

        @Override
        public void mouseDragged(MouseEvent event) {
            xval=event.getX();
            yval=event.getY();
            repaint();
        }
    });

    setSize(500, 500);
    setVisible(true);
    setDefaultCloseOperation(PaintFlower102.DISPOSE_ON_CLOSE);
}

public void paint(Graphics g) {      
    g.fillOval(xval, yval, 10, 10);   
}

问题在于,如果我没有将extend JFrame放在课堂上,那就不行了。如果我这样做,它会创建一个我可以绘制的新框架。

2 个答案:

答案 0 :(得分:7)

建议:

  • 除了绝对需要的罕见情况外,不要直接在JFrame中绘画(这不是其中之一)。
  • 而是在JPanel或JComponent或JComponent的其他衍生物中绘制。
  • 在类的paintComponent(Graphics g)方法中绘制,而不是在paint(Graphics g)
  • 阅读关于此的Java教程,因为它们都在那里得到了很好的解释。查看Trail: 2D GraphicsPerforming Custom Painting

答案 1 :(得分:0)

我可能错了,但我认为你需要包含super.paintComponent(g),并覆盖像Hovercraft Full Of Eels所说的paintComponent方法。

public void paintComponent(Graphics g) {
    super.paintComponent(g);       

    // Draw Oval
   g.fillOval(xval, yval, 10, 10);
}