如何将图形组件存储在逻辑结构中?

How can I store graphics components together in a logical structure?

我写了一个刽子手游戏,我也想添加一些 Java2D 图形。我相信大多数人都知道这一点,但为了以防万一,让我把它说清楚。在刽子手中,每次犯错后都会画出一点点 "hanging" 简笔画,直到画完为止。

因此,当我画这个时,合乎逻辑的方法是 运行 一个 for 循环并绘制尽可能多的组件有错误。因为我知道我需要按什么顺序绘制组件,所以我可以循环遍历数组类型以进行绘制。现在,如果我只是使用 java.awt.Rectangles,那么创建一个 Rectangle 的数组会很容易。但是,由于对于刽子手我也使用一个 Ellipse2D,我需要一种方法将两个图形组件以数组类型格式存储在一起。我可以用什么来做到这一点? (我听说过 ArrayLists,但我真的不知道如何使用它们,我相信你仍然需要为它们指定一个对象类型)

示例代码也将不胜感激。如果这是不可能的,也请告诉我,因为我可以独立绘制头部。

static int mistakes = 3;
static Ellipse2D head = new Ellipse2D.Double(420, 210, 160, 160); 
static Rectangle torso = new Rectangle(3, 3, 3, 3);
static Rectangle leftArm = new Rectangle(3, 3, 3, 3);
static Rectangle rightArm = new Rectangle(3, 3, 3, 3);
static Rectangle leftLeg = new Rectangle(3, 3, 3, 3);
static Rectangle rightLeg = new Rectangle(3, 3, 3, 3);

Rectangle[] hangman = new Rectangle[5];
hangman[0] = torso;
hamgman[1] = leftArm;
//continue... 

for(int i = 0; i < mistakes; i++) g2d.draw(hangman[i]); //but then the head is left out :( 

您可以使用形状数组:[Shape] 称为 shapes,或 ArrayList<Shape>,然后用 Ellipse2DRectangle2D 填充它Line2D 和类似的对象。请注意,要绘制 Shape 派生对象,您需要使用 Graphics2D 对象,因此在 JPanel 的 paintComponent(Graphics g) 方法中,请务必先将 Graphics 对象转换为 Graphics2D:

Graphics2D g2 = (Graphics2D) g;

然后您的 for 循环可以遍历您的数组,从 0 循环到 errorCount(但首先确保 errorCount 永远不会 > 数组的长度。例如,

Graphics2D g2 = (Graphics2D) g;
errorCount = Math.min(errorCount, shapes.length);
for (int i = 0; i < errorCount; i++) {
    g2.draw(shapes[i]);
}