1

![在此处输入图片描述][1]我正在学校学习 Java 编程的第一年,我正在为我的书向前看一点。我遇到了一个Canvas有方法的类(称为 )draw(Shape shape)

出于某种原因,我无法弄清楚如何将任何形状绘制到画布上。我已经搜索了 Java API,但我无法获得正确的语法。我很生气,因为我知道它非常简单。任何帮助将不胜感激。

这是我坚持使用的方法的代码:

/**
 * Draw the outline of a given shape onto the canvas.
 * @param  shape  the shape object to be drawn on the canvas
 */
public void draw(Shape shape)
{
    graphic.draw(shape);
    canvas.repaint();
}

当我从对象调用方法时,它给了我这样的东西:

canvas1.draw(->Shape shape<-)

我试过了:

java.awt.Shape circle
java.awt.Shape Circle
Circle circle
Shape circle

这个名单永远存在。

编辑:

这是班上的肉和土豆……很简单的东西

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

/**
 * Class Canvas - a class to allow for simple graphical 
 * drawing on a canvas.
 * 
 * @author Michael Kölling (mik)
 * @author Bruce Quig
 *
 * @version 2011.07.31
 */

public class Canvas
{
    private JFrame frame;
    private CanvasPane canvas;
    private Graphics2D graphic;
    private Color backgroundColor;
    private Image canvasImage;

    /**
     * Create a Canvas with default height, width and background color 
     * (300, 300, white).
     * @param title  title to appear in Canvas Frame     
     */
    public Canvas(String title)
    {
        this(title, 300, 300, Color.white);
    }

    /**
     * Create a Canvas with default background color (white).
     * @param title  title to appear in Canvas Frame
     * @param width  the desired width for the canvas
     * @param height  the desired height for the canvas
     */
    public Canvas(String title, int width, int height)
    {
        this(title, width, height, Color.white);
    }

    /**
     * Create a Canvas.
     * @param title  title to appear in Canvas Frame
     * @param width  the desired width for the canvas
     * @param height  the desired height for the canvas
     * @param bgClour  the desired background color of the canvas
     */
    public Canvas(String title, int width, int height, Color bgColor)
    {
        frame = new JFrame();
        canvas = new CanvasPane();
        frame.setContentPane(canvas);
        frame.setTitle(title);
        canvas.setPreferredSize(new Dimension(width, height));
        backgroundColor = bgColor;
        frame.pack();
        setVisible(true);

-- 如果我有足够的代表发布屏幕截图,我会 --

4

2 回答 2

2

查看更多代码可能会有所帮助,但我猜测图形不是参数,您以某种方式自己创建了图形对象。这个来自 javadoc for canvas 的花絮应该可以帮助你:

应用程序必须继承 Canvas 类才能获得有用的功能,例如创建自定义组件。

我通常希望看到你将 Canvas 子类化,然后覆盖paint()这样的东西......

public Class MyCanvas extends java.awt.Canvas {

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

    // some code to create the shape here... such as...
    // A rectangle with UL corner at 10,10, 30 wide, 50 high
    Shape myRectangle = new Rectangle2D.Float(10,10,30,50); 

    g.draw(myRectangle);

  }
}

通过这种方式,您可以获得属于画布的图形对象,并在其上绘制形状。我怀疑您正在做的是将它绘制到其他一些图形对象(不是属于画布的对象)上。通常这意味着您在某个地方创建了一个图像,从中拉出一个图形对象并绘制到图像中。但是该图像可能没有被任何组件吸引......如果没有更多代码,很难确定。

就像任何其他组件一样,您可以将画布放在 UI 中的任何位置。

myFrame.add(new MyCanvas()); // example if you are adding it a frame called myFrame.

每当Java决定需要重绘 MyCanvas 对象时,Java 都会调用 paint 方法。你永远不需要调用油漆。

希望有帮助!

于 2013-03-19T01:53:16.280 回答
0

使用,例如:

    drawShape(new java.awt.Rectangle(10, 10, 40, 40))

在 Bluej 方法调用窗口中传递的参数是

    new java.awt.Rectangle(10, 10, 40, 40)
于 2017-10-30T09:29:32.733 回答