Java 绘制要边框的形状对象的阵列列表

Java 绘制要边框的形状对象的阵列列表,java,interface,arraylist,drawable,draw,Java,Interface,Arraylist,Drawable,Draw,我很难将形状(圆形和矩形)绘制到框架中 我创建了一个圆和一个矩形类来实现Shape接口。然后我创建了DrawableCircle和DrawableRectangle类,它们适当地扩展了Circle和Rectangle类,并实现了DrawableInterface 我现在尝试创建一个ShapesDriver类,它扩展了Frame,并在其中包含main方法和paint(Graphics g)方法。在ShapesDriver中,我需要创建一个Drawable类型的ArrayList。此ArrayLis

我很难将形状(圆形和矩形)绘制到框架中

我创建了一个圆和一个矩形类来实现Shape接口。然后我创建了DrawableCircle和DrawableRectangle类,它们适当地扩展了Circle和Rectangle类,并实现了DrawableInterface

我现在尝试创建一个ShapesDriver类,它扩展了Frame,并在其中包含main方法和paint(Graphics g)方法。在ShapesDriver中,我需要创建一个Drawable类型的ArrayList。此ArrayList包含DrawableCircle和DrawableRectangle的实例。在paint方法中,我必须遍历ArrayList并为每个形状调用draw方法

这就是我被困的地方

任何帮助都将不胜感激

形状界面

public interface Shape {

    public double area();

}
import java.awt.Color;
import java.awt.Graphics;

public interface DrawableInterface {

    public void setColor(Color c);
    public void setPosition(int x, int y);
    public void draw(Graphics g);

}            
圆类

 public class Circle implements Shape{

        private int radius;
        private double area;

        public Circle(int r){
            radius = r;

        }

        @Override
        public double area() {

            area = Math.PI * (radius * radius);
            return area;
        }

}
矩形类

public class Rectangle implements Shape{

    double height;
    double width;
    double area;

    public Rectangle(double h, double w){
        height = h;
        width = w;
    }

    @Override
    public double area() {
        area = height * width;
        return area;
    }

}
可绘制界面

public interface Shape {

    public double area();

}
import java.awt.Color;
import java.awt.Graphics;

public interface DrawableInterface {

    public void setColor(Color c);
    public void setPosition(int x, int y);
    public void draw(Graphics g);

}            
可画圆

import java.awt.Color;
import java.awt.Graphics;


public class DrawableCircle extends Circle implements DrawableInterface{

    private Color col;
    private int posX;
    private int posY;

    public DrawableCircle(int r){
        super(r);
    }

    @Override
    public void setColor(Color c) {
        col = c;
    }

    @Override
    public void setPosition(int x, int y) {
        posX = x;
        posY = y;
    }

    @Override
    public void draw(Graphics g) {

        g.setColor(col);
        g.drawOval(posX, posY, 15, 15);
    }



}
可画矩形

import java.awt.Color;
import java.awt.Graphics;


public class DrawableRectangle extends Rectangle implements DrawableInterface{

    private Color col;
    private int posX;
    private int posY;

    public DrawableRectangle(double h, double w){
        super(h, w);
    }

    @Override
    public void setColor(Color c) {
        col = c;
    }

    @Override
    public void setPosition(int x, int y) {
        posX = x;
        posY = y;
    }

    @Override
    public void draw(Graphics g) {

    g.setColor(col);
    g.drawRect(posX,posY,10,10);

    }

}
形状驱动器

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;


public class ShapesDriver extends Frame {

static ArrayList<DrawableInterface> shapesArr = new ArrayList<DrawableInterface>();

    public ShapesDriver() {
        super("Shapes Object Array");
        setSize(400, 300);
        setLocation(200, 200);

        setVisible(true);
    }

    public static void main(String[] args) {


        DrawableCircle c = new DrawableCircle(500);
        c.setColor(Color.GREEN);
        c.setPosition(25, 25);

        DrawableRectangle r = new DrawableRectangle(100, 50);
        r.setColor(Color.RED);
        r.setPosition(75, 75);

        shapesArr.add(c);
        shapesArr.add(r);


 ShapesDriver shapeFrame = new ShapesDriver();

         shapeFrame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    }

    @Override
    public void paint(Graphics g) {

        for (DrawableInterface s : shapesArr) {
            super.paint(g);

            s.draw(g);
        }
    }
}
导入java.awt.Color;
导入java.awt.Frame;
导入java.awt.Graphics;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.util.ArrayList;
公共类ShapesDriver扩展框架{
静态ArrayList shapeSAR=新ArrayList();
公共形状驱动程序(){
超级(“形状对象数组”);
设置大小(400300);
设置位置(200200);
setVisible(真);
}
公共静态void main(字符串[]args){
可绘制圆c=新的可绘制圆(500);
c、 setColor(Color.GREEN);
c、 设定位置(25,25);
可绘制矩形r=新的可绘制矩形(100,50);
r、 setColor(Color.RED);
r、 设定位置(75,75);
形状arr.add(c);
形状arr.add(r);
ShapesDriver ShapeName=新的ShapesDriver();
shapeFrame.addWindowListener(新的WindowAdapter(){
@凌驾
公共无效窗口关闭(WindowEvent e){
系统出口(0);
}
});
}
@凌驾
公共空间涂料(图g){
用于(可绘图界面s:ShapeSAR){
超级油漆(g);
s、 抽签(g);
}
}
}
“这就是我被困的地方……”
——你到底被困在哪里

我本人会:

  • 使用Swing GUI而不是AWT GUI,因为Swing比AWT更强大、更灵活。几乎不需要创建AWT GUI
  • 您的GUI类ShapesDriver不执行任何操作。它扩展了框架,但从未创建ShapesDriver的实例。相反,它有一个主方法,您可以在其中创建一个单独的框架。在我的GUI代码中,我会创建一个真正的GUI类,它有实例字段和方法,并且一定会在某个地方创建这个类的实例
  • 在我的GUI类中,我将拥有形状的ArrayList和绘图方法,并将在绘图方法中循环ArrayList,在循环时绘制每个形状
  • 因为我喜欢使用Swing,所以我的GUI类将扩展JPanel,我的绘图方法将是
    paintComponent(Graphics g)
    方法。如果您需要使用AWT,那么您可以使用面板并在其
    paint(Graphics g)
    方法中绘制
  • 然后我会有一个主方法来创建GUI,使其可见,而不做其他事情

感谢您的回复!是的,考虑到我所得到的规格,看起来我使用的是框架而不是JFrame。我对JFrames稍有经验,但对awt Frames没有经验。我不确定绘制方法需要做些什么,也不确定需要采取哪些步骤来迭代ArrayList绘制其中包含的对象?@user2904978:我试图避免勺食,让我们看看您的最佳尝试;我应该改为使用类似shapedriver shapeFrame=newshapedriver()的东西@user2904978:是的,您的主要方法将需要这样做,以创建和显示ShapesDriver的实例。