我正在尝试构建一个显示随机形状和随机文本的程序。这是我的类中扩展JPanel的代码。为什么repaint()会导致与调整窗口大小不同导致不同的结果? (Java)
@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()我自己不会添加额外的标签,如调整窗口大小呢?
好的,如果我正确理解了你,如果我自己调用repaint(),那么组件仍然会添加到JPanel中,但是我不能看到它们,因为它们没有通过validate()方法进行布局? super.paintComponent(g)实际上清除了包含exrta JLabel的窗口,但是每次JPanel重绘时它们都会自动重新绘制,因为它们已经“永久”添加到JPanel中了? (注意:我知道添加paintcomponent方法内的组件是错误的,我只是好奇它显示的行为) – Henk