所以我有一个大学的任务。这个概念是我们要完成一些类层次结构的东西。基本上它是允许我们绘制不同形状的东西。
我可以成功地绘制每个形状;我需要的地方和我需要它有多大,就像需要一样......我遇到麻烦的部分是这个复合层次结构。
基本上我们应该有一个名为Compound.java
的新类,并且我们应该有另外三个类,House
,tree
和earth
;每个都应该采取我们创建的形状对象(矩形,正方形,线形,椭圆形和圆形),并绘制所需的图片,如类名所示。
我遇到问题的地方是在上课;例如:我可以让它绘制一个矩形但是当我试图让它绘制第二个矩形之后,它基本上会忘记第一个矩形并且只绘制第二个矩形!
我们没有对Graphics的任何练习,所以我不知道任何方法或任何我可以调用绘制然后继续House
构造函数。
我理解为什么它会覆盖第一个矩形,当调用House
构造函数时,它会遍历构造函数中的所有内容,然后返回到Compound.java
并使用{来绘制它{1}}方法......
但我不知道如何解决它!任何帮助将不胜感激......它将于明天到期。
以下是所有代码:
Shape.java:
draw(Graphics g)
ClosedShape.java:
import java.awt.*;
public abstract class Shape {
int initX, initY;
Color fillColour;
public Shape() {
initX = 0;
initY = 0;
}
public Shape(int x, int y) {
initX = x;
initY = y;
}
public void setInitX (int x) {
initX = x;
}
public void setInitY (int y) {
initY = y;
}
public abstract void draw(Graphics g);
public abstract double Area();
public abstract double Perimeter();
public void Move(int deltaX, int deltaY){
//future work
}
}
Rectangle.java:
import java.awt.Graphics;
public abstract class ClosedShape extends Shape {
boolean polygon;
int numPoints;
int[] xVertices;
int[] yVertices;
int x,y,width, height;
public ClosedShape(boolean isPolygon, int numPoints) {
super(0,0);
this.polygon = isPolygon;
this.numPoints = numPoints;
}
public ClosedShape(boolean isPolygon, int numPoints, int[] x, int[] y) {
super(x[0],y[0]);
this.polygon = isPolygon;
if (isPolygon) {
this.numPoints = numPoints;
xVertices = new int[numPoints]; // error check? if x.length == numPoints
for (int i = 0; i < x.length; i++) { // make copy of array: why?
xVertices[i] = x[i];
}
yVertices = new int[numPoints]; // error check? if y.length == numPoints
for (int i = 0; i < y.length; i++) { // make copy of array
yVertices[i] = y[i];
}
}
else { // its an oval - define bounding box
this.numPoints = 4;
this.x = x[0];
this.y = y[0];
width = x[1];
height = y[1];
}
}
public void setXYCoords(int[] x, int[] y){
this.xVertices = x;
this.yVertices = y;
}
// Gives access to the width attribute
public void setWidth(int width){
this.width = width;
}
// Gives access to the height attribute
public void setHeight(int height) {
this.height = height;
}
public void draw(Graphics g) {
if (polygon) {
g.drawPolygon(xVertices, yVertices, numPoints);
}
else {
g.drawOval(x, y, width, height);
}
}
public abstract double Area();
public abstract double Perimeter();
}
Compound.java:
public class Rectangle extends ClosedShape
{
public Rectangle(int x, int y, int width, int height)
{
super(true, 4);
setWidth(width);
setHeight(height);
int [] arrayX = new int[4];
arrayX[0] = x;
arrayX[1] = (x+width);
arrayX[2] = (x+width);
arrayX[3] = x;
int [] arrayY = new int[4];
arrayY[0] = y;
arrayY[1] = y;
arrayY[2] = y+height;
arrayY[3] = y+height;
setXYCoords(arrayX, arrayY);
}
public double Area()
{
return 0;
}
public double Perimeter()
{
return 0;
}
}
House.java:
import java.awt.*;
import java.awt.Graphics;
public class Compound
{
boolean polygon;
int[] xVertices;
int[] yVertices;
int initX, initY;
Color fillColour;
public void setXYCoords(int[] x, int[] y)
{
this.xVertices = x;
this.yVertices = y;
}
public void draw(Graphics g)
{
if (polygon) {
g.drawPolygon(xVertices, yVertices, 4);
}
else {
g.drawOval(1, 1, 1, 1);
}
}
}
答案 0 :(得分:0)
从示例代码中,无法向Compound
类“添加”任何形状。根据您的描述,Compound
应该是形状的“容器”。更多的东西......
public class Compound
{
private List<Shape> shapes;
public Compound() {
shapes = new ArrayList<Shape>(25);
}
public void addShape(Shape shape) {
shapes.add(shape);
}
public Iterable<Shape> getShapes() {
return shape;
}
public void draw(Graphics g) {
for (Shape shape : shapes) {
shape.draw(g);
}
}
}
现在你需要决定,如果为形状本身定义Color
和Shape
,最好将它关联在哪里?这意味着您无法重复使用该形状。或者使用Compound
形状?