Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谁知道如何依次绘制图形原语_Java - Fatal编程技术网

Java 谁知道如何依次绘制图形原语

Java 谁知道如何依次绘制图形原语,java,Java,例如,先说矩形,然后说直线 import java.awt.Graphics; import java.awt.Color; import java.awt.Canvas; import javax.swing.JComponent; import javax.swing.JFrame; //class MyCanvas extends JComponent { class MyCanvas extends Canvas { public void paint(Graphics

例如,先说矩形,然后说直线

import java.awt.Graphics;
import java.awt.Color;
import java.awt.Canvas;
import javax.swing.JComponent;
import javax.swing.JFrame;

//class MyCanvas extends JComponent {   

class MyCanvas extends Canvas {
   public void paint(Graphics g) {
      g.fillRect(20, 20, 500, 500);
   }
}

class Linie extends MyCanvas {
   public void paint(Graphics g) {
      g.setColor(new Color(0, 255, 0));
      g.drawLine(30, 40, 300, 100);

   }
}

public class LinieUndRec {
   public static void main(String[] a) {
      JFrame window = new JFrame();
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      window.setBounds(100, 100, 800, 800);
      window.getContentPane().add(new MyCanvas());
      window.getContentPane().add(new Linie());
      window.setVisible(true);
   }
}
这段代码只画了一条线
如何绘制矩形和直线在Linie类的实现中,提供了绘制方法的代码。这将替换MyCanvas类上的paint方法的代码,因为Linie扩展了MyCanvas

因此,在对Linie实例调用paint时,仅运行Linie.paint方法中的代码,而不是同时运行这两种方法。如果希望同时运行这两个选项,请添加并执行以下操作:

class Linie extends MyCanvas {
    public void paint(Graphics g) {
        super.paint(g);   // This will draw the rectangle from the parent class,
                          // then render the line below

        g.setColor(new Color(0,255,0));
        g.drawLine(30,40, 300, 100);
    }
}
顺便说一句,尽管上面的代码应该可以工作,但类型继承并不能解决此类问题。我只是想对提供的代码提供一个答案

如果确实要绘制一个后跟一条线的矩形,请在表示矩形的对象上调用.paint,然后在表示线的对象上依次调用.paint。这里的代码非常糟糕,如果你是Java新手,那也没关系——我们都是新手。您正在使用继承来完成只需依次调用两个.paint命令即可完成的任务


正如所指出的,您可以使用单个画布绘制所有图形。每个绘图操作不需要一个画布。把画布想象成你可以在上面画画的表面,比如一张纸,或者画家的画布。并将绘画操作视为构造绘画所需的操作说明。一般来说,你必须先画背景中的东西,然后再画前景中的东西。结果是,先绘制的图形被后绘制的图形所覆盖。

是否可以包含指向您获得的图像和您期望的图像的链接?代码同时绘制了这两幅图像,但Linie画布恰好覆盖了MyCanvas。您使用一个画布绘制所有内容,而不是多个。该程序必须同时绘制矩形和直线,但它只绘制一条直线。您的意思是window.getContentPane.addnew MyCanvas.paint;?