无法直接在JFrame上绘制

Leo*_*das 0 java swing paint

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

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

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

这是班级的召唤:

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

    PaintFlower102 f = new PaintFlower102();
}
Run Code Online (Sandbox Code Playgroud)

课程的一部分:

    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);   
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我不把它extend JFrame放在课堂上这不起作用.如果我这样做,它会创建一个我可以绘制的新框架.

Hov*_*els 7

建议:

  • 除非在绝对需要的罕见情况下(这不是其中之一),否则不要直接在JFrame中绘制.
  • 而是在JPanel或JComponent或JComponent的其他衍生物中绘制.
  • 在类的paintComponent(Graphics g)方法中绘制,而不是在paint(Graphics g).
  • 阅读关于此的Java教程,因为它们都在那里得到了很好的解释.查看Trail:2D图​​形执行自定义绘画.