Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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 未在BuffereImage上绘制的矩形_Java_Graphics_Bufferedimage - Fatal编程技术网

Java 未在BuffereImage上绘制的矩形

Java 未在BuffereImage上绘制的矩形,java,graphics,bufferedimage,Java,Graphics,Bufferedimage,我学习java已经有一段时间了,我刚刚开始了一个制作函数绘图程序的项目。但是,下面的代码应该在BuffereImage上绘制一个矩形,但它不起作用 绘制矩形的代码 public class DrawRectangle extends Panel { public void drawRect(int x, int y, int width, int height) { System.out.println("new Rectangle = X:" + x + " Y:" + y + "

我学习java已经有一段时间了,我刚刚开始了一个制作函数绘图程序的项目。但是,下面的代码应该在BuffereImage上绘制一个矩形,但它不起作用

绘制矩形的代码

public class DrawRectangle extends Panel {

public void drawRect(int x, int y, int width, int height) {
    System.out.println("new Rectangle = X:" + x + " Y:" + y + " Width:" + width + " height:" + height);
    canvas.createGraphics().draw(new Rectangle2D.Double(x, y, width, height));
}}



public class Panel extends JPanel {

BufferedImage canvas = new BufferedImage(400,400, BufferedImage.TYPE_INT_ARGB);

......

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

    System.out.println("Repainting");

    g.drawImage(canvas, 25, 25, null);

}}

注意:所有的方法都正确运行,所以这不仅仅是因为我忽略了启动drawRectangle()

编辑我的错误:您没有正确设置颜色。也就是说:

e、 g


@HovercraftFullOfEels My Bad要更快地获得更好的帮助,请发布一个.drawImage(canvas,25,25,null)应该是
g.drawImage(canvas,25,25,this)@HovercraftFullOfEels哦,是的。已编辑(删除):Pprivate变量不是继承的。是的,但是变量是继承的,子类可以直接将它们用作自己的变量=)@LittleChild:我的错,你说得对。他的错误是没有设置图形对象的颜色。
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;   
import javax.swing.*;

public class FunnyDraw {

   private static void createAndShowGui() {
      DrawRectangle mainPanel = new DrawRectangle();
      mainPanel.drawRect(10, 10, 100, 100);
      mainPanel.betterDrawRect(200, 200, 200, 200);

      JFrame frame = new JFrame("FunnyDraw");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

class HisPanel extends JPanel {

   private static final Color COLOR = Color.black;
   private static final int PREF_W = 600;
   private static final int PREF_H = 450;
   protected BufferedImage canvas = new BufferedImage(PREF_W, PREF_H,
         BufferedImage.TYPE_INT_ARGB);

   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      System.out.println("Repainting");
      g.drawImage(canvas, 25, 25, null);
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }

   public void draw(Shape shape) {
      Graphics2D g2 = canvas.createGraphics();
      g2.setColor(COLOR);
      g2.draw(shape);
      g2.dispose();
      repaint();
   }
}

class DrawRectangle extends HisPanel {

   public void drawRect(int x, int y, int width, int height) {
      Graphics2D g2 = canvas.createGraphics();
      g2.setColor(Color.black);
      g2.draw(new Rectangle2D.Double(x, y, width, height));
      g2.dispose();
      repaint();
   }

   public void betterDrawRect(int x, int y, int width, int height) {
      draw(new Rectangle2D.Double(x, y, width, height));
   }
}