gpt4 book ai didi

java swing - 如何一次重新绘制所有组件,以便用户不会注意到它们被一一填充?

转载 作者:行者123 更新时间:2023-11-30 04:51:11 24 4
gpt4 key购买 nike

我创建了一个扩展 JPanel 的 Hexagon 组件。它在PaintComponent()中绘制一个六边形多边形。为了让它用给定的颜色填充多边形,我创建了一个 Highlight() 方法来导致组件重新绘制:

public class Hexagon{
private Color highlightColor;
private boolean highlighted;
private Polygon polygon;

public Hexagon(int width ... etc){
// code to create the hexagon polygon to be drawn
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawPolygon(polygon);

// highlighting
if(highlighted){
g2d.setColor(highlightColor);
g2d.fillPolygon(polygon);
}
}

public void highlight(Color highlightColor){
highlight(highlightColor, false);
}

public void highlight(Color highlightColor, boolean dontRepaint){
highlighted = true;
this.highlightColor = highlightColor;
if(dontRepaint) { return; }
repaint();
}
}

现在,当我想一次突出显示(填充)多个六边形时,就会出现问题。为了突出显示它们,我将使用 for 循环并调用 Hexagon.highlight(Color.orange)。然而,对于用户来说,一次填充一个六边形是显而易见的。这是填充如何发生的示例图像

Hexagons before being filled with color Hexagons during filling Hexagons after being filled

我尝试了另一种重绘方法,让包含六边形的 JPanel 自行重绘。示例:

 // this code is inside the containing Jpanel that hosts all the hexagons
public void highlightManyHexagons(List<Hexagon> hexes){
for(Hexagon h : hexes){
// use overload that prevents the hexagon to do a repaint
h.highlight(Color.orange, true);
}
// repaint the whole panel
repaint();
}

这不起作用。知道如何一次填充所有六边形吗?谢谢。

最佳答案

您可以尝试创建一个由所有要填充的六边形组成的形状。使用 Area 类和 public void add(Area rhs) 方法。可以基于六角形对象创建区域。然后填充单个区域。

关于java swing - 如何一次重新绘制所有组件,以便用户不会注意到它们被一一填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com