Java Can';不要直接在框架上涂漆

Java Can';不要直接在框架上涂漆,java,swing,paint,Java,Swing,Paint,我的任务是用Java创建一个绘画程序。我成功地创造了一些东西,但并不完全是我想要的 我的问题是,我无法根据IDE提供的选项在IDE(NetBeans 7.0.1)中创建JFrame,也无法正确调用paint类 更具体地说,我想从一个面板(例如Panel1)上按下一个按钮,然后在同一个框架中的Panel2中进行绘制 这就是我们班的使命: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

我的任务是用Java创建一个绘画程序。我成功地创造了一些东西,但并不完全是我想要的

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

更具体地说,我想从一个面板(例如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
放在类中,这将不起作用。如果我这样做,它会创建一个新的框架,我可以在其中画画。

建议:

  • 永远不要直接在JFrame中画画,除非在极少数绝对需要的情况下(这不是其中之一)
  • 相反,使用JPanel或JComponent或JComponent的其他衍生物进行绘制
  • 在类的
    paintComponent(Graphics g)
    方法中绘制,而不是在
    Paint(Graphics g)
    中绘制
  • 请阅读关于这方面的Java教程,因为这些教程都解释得很好。退房并离开

我可能错了,但我认为您需要包括super.paintComponent(g),并覆盖paintComponent方法,就像装满鳗鱼的气垫船所说的那样

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

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

作业和家庭作业一样吗?请添加更多的代码,这是非常不够的,以允许任何合理的建议。感谢您的答复。但是如果我不必在JFrame中绘制,而是在JPanel上绘制,那么当我从IDE创建JFrame和面板时,我将如何从面板调用paint方法。我希望你能理解我的问题。例如,如果我按下一个按钮,我应该添加一个调用该方法的eventlistener?@Leonidas:您从来不会直接调用paint或paintcomponent方法。相反,如果希望调用方法重写,可以创建方法重写并调用
repaint()
。此外,还有一些方法可以告诉IDE您想要重写超类的方法,这就是您应该做的。我自己并不使用NetBeans,而是手工编写Swing GUI。