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) を呼び出します。ただし、一度に 1 つの六角形が塗りつぶされていることは、ユーザーにとって明らかです。これは、充填がどのように行われるかのサンプル画像です
Hexagons を含む 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();
}
これはうまくいきませんでした。一度にすべての六角形を埋める方法はありますか? ありがとう。