Java 绘制要边框的形状对象的阵列列表
我很难将形状(圆形和矩形)绘制到框架中 我创建了一个圆和一个矩形类来实现Shape接口。然后我创建了DrawableCircle和DrawableRectangle类,它们适当地扩展了Circle和Rectangle类,并实现了DrawableInterface 我现在尝试创建一个ShapesDriver类,它扩展了Frame,并在其中包含main方法和paint(Graphics g)方法。在ShapesDriver中,我需要创建一个Drawable类型的ArrayList。此ArrayList包含DrawableCircle和DrawableRectangle的实例。在paint方法中,我必须遍历ArrayList并为每个形状调用draw方法 这就是我被困的地方 任何帮助都将不胜感激 形状界面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
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,我的绘图方法将是
方法。如果您需要使用AWT,那么您可以使用面板并在其paintComponent(Graphics g)
方法中绘制paint(Graphics g)
- 然后我会有一个主方法来创建GUI,使其可见,而不做其他事情