【发布时间】:2014-12-25 15:29:30
【问题描述】:
我真的需要你们的帮助。 我尝试将矩形添加到 ArrayList,然后循环遍历列表以将它们全部绘制出来。我不确定我是否使用了正确的方法,但这是我目前的代码。
编辑:代码不会绘制我添加到 ArrayList 的矩形。我什至不知道它们是否以正确的方式添加,或者以正确的方式通过 for 循环访问。
在测试程序中
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JFrame;
public class TestProgram extends JFrame {
private ShapeRectangle rectangle;
public ArrayList<Shapes> list = new ArrayList<Shapes>();
public TestProgram(String title) {
super(title);
setLayout(new BorderLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
initComponents();
setSize(500, 700);
setVisible(true);
}
private void initComponents() {
rectangle = new ShapeRectangle();
add(rectangle, BorderLayout.CENTER);
list.add(rectangle);
Graphics g = getGraphics();
for (int i = 0; i < list.size(); i++) {
rectangle.draw(g);
}
}
public static void main(String args[]) {
new TestProgram("Drawing program");
}
}
在 ShapeRectangles 类中:
import java.awt.Graphics;
public class ShapeRectangle extends Shapes {
public ShapeRectangle() {}
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
draw(g);
}
@Override
public void draw(Graphics g) {
g.drawLine(20,20,60,60);
g.drawLine(130,30,80,11);
g.drawRect(200,30,20,140);
}
}
在形状类中:
import java.awt.Graphics;
import javax.swing.JPanel;
public abstract class Shapes extends JPanel {
abstract public void draw(Graphics g);
}
【问题讨论】:
-
您的问题到底是什么?代码看起来不错。
-
我闻到了
NullPointerException酿造的味道:Graphics g = null; -
将
Shapes设为abstract class并在其子项中覆盖您的draw(g)方法。 -
@Mr.Polywhirl 我刚刚将 null 更改为 getGraphics();还是不行。。
-
我也将 Shapes 抽象化了。请参阅上面的更新代码。还是不行。。