我正在尝试构建一个显示随机形状和随机文本的程序。这是我在类中扩展 JPanel 的代码。
@Override
protected void paintComponent(Graphics g) {
// draw all shapes
super.paintComponent(g); // clears the background
this.add(new JLabel(new RandomText().getRandomSentence()));
for (RandomShape shape : shapes) {
shape.draw(g);
}
}
我使用 JPanel 而不是 g.drawString() 来显示 HTML 代码。我还有一个通过调用 repaint() 方法“重新生成”窗口的按钮。但是,当我按下重新生成按钮,从而调用 repaint() 方法时,形状会发生变化(就像他们应该做的那样),但文本不会。我发现更奇怪的是,当我调整窗口大小时,新标签会不断添加到我的面板中(随机文本就像他们应该的那样)。
super.paintCompnent(g) 是否不清除添加到面板的组件?如果是这样,为什么我自己调用 repaint() 不会添加额外的标签,就像调整窗口大小一样?