![在这里输入图像描述] [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);
- 如果我有足够的代表发布屏幕截图我会 -
答案 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)