java.awt.Shape正在欺骗我

时间:2013-03-19 01:35:12

标签: java syntax awt draw java-2d

![在这里输入图像描述] [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);

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

2 个答案:

答案 0 :(得分: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方法。你永远不需要打电话。

希望有所帮助!

答案 1 :(得分:0)

使用,例如:

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

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

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