我试图重新创建catan六角形网格,但是我对applet和swing还是陌生的。我对paint()的概念不清楚。我发现图形方法drawPolygon必须用于...

问题描述 投票:0回答:1
java applet
1个回答
0
投票

用户移动窗口

用户图标化或取消图标化窗口

用户将另一个窗口移到窗口的前面

    用户将您的窗口置于最前面
  • 用户将鼠标移到您的组件上
  • 用户锁定或空白屏幕
  • 用户滚动包含小程序的网页
  • 用户重新加载包含小程序的网页
  • 每秒可能进行多次绘制。或者,它可能仅偶尔发生。
  • 由于您无法控制绘画方法的调用时间,因此只能包含绘图逻辑。如果您从列表中删除值,则在随后调用paint方法时这些值将不可用。
  • 这就是为什么您不能在hexValueList方法中修改placeNumbers列表的原因,因为该方法由drawHexagonalGrid调用,而paint则由该方法调用。
  • [而不是从hexValueList中删除数字,而是使用列表的iterator()方法对其进行迭代,并将每个迭代的int值作为参数传递给placeNumbers

    private void placeNumbers(Graphics g, Polygon p, boolean flag, int hexValue) { int x = p.getBounds().x + 30; int y = p.getBounds().y + 50; int width = p.getBounds().width / 3; int height = p.getBounds().width / 3; g.drawOval(x, y, width, height); g.setColor(Color.WHITE); // g.setColor(new Color((int)(Math.random() * 0x1000000))); g.fillOval(x, y, width, height); g.setColor(Color.BLACK); if (flag) { g.drawString("" + hexValue, x + 10, y + 20); } } private Graphics drawHexagonalGrid() { Iterator<Integer> hexValueIterator = hexValueList.iterator(); System.out.println("Drawing the hexagonal grid"); Graphics g = getGraphics(); System.out.println("graphics---->" + g); boolean isValidHex = true; // row 1 - three grids Polygon p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 45), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 20), nPoints); // g.drawPolygon(p); g.setColor(Color.GREEN); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 135), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 20), nPoints); g.drawPolygon(p); g.setColor(Color.BLUE); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 225), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 20), nPoints); g.drawPolygon(p); g.setColor(Color.RED); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); // row 2 - four grids p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 0), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 110), nPoints); g.drawPolygon(p); // System.out.println(Arrays.toString(p.xpoints) + " " + // Arrays.toString(p.ypoints)); g.setColor(Color.GRAY); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 90), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 110), nPoints); g.drawPolygon(p); // System.out.println(Arrays.toString(p.xpoints) + " " + // Arrays.toString(p.ypoints)); g.setColor(Color.ORANGE); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 180), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 110), nPoints); g.drawPolygon(p); // System.out.println(Arrays.toString(p.xpoints) + " " + // Arrays.toString(p.ypoints)); g.setColor(Color.YELLOW); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 270), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 110), nPoints); g.drawPolygon(p); // System.out.println(Arrays.toString(p.xpoints) + " " + // Arrays.toString(p.ypoints)); g.setColor(Color.YELLOW); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); // row 3 - five grids p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT - 45), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 200), nPoints); g.drawPolygon(p); g.setColor(Color.PINK); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 45), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 200), nPoints); g.drawPolygon(p); g.setColor(Color.GREEN); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 135), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 200), nPoints); g.drawPolygon(p); g.setColor(Color.BLACK); g.fillPolygon(p); placeNumbers(g, p, !isValidHex, 0); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 225), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 200), nPoints); g.drawPolygon(p); g.setColor(Color.GRAY); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 315), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 200), nPoints); g.drawPolygon(p); g.setColor(Color.RED); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); // row 4 - four grids p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 0), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 290), nPoints); g.drawPolygon(p); g.setColor(Color.GRAY); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 90), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 290), nPoints); g.drawPolygon(p); g.setColor(Color.RED); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 180), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 290), nPoints); g.drawPolygon(p); g.setColor(Color.PINK); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 270), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 290), nPoints); g.drawPolygon(p); g.setColor(Color.GREEN); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); // row 5 - three grids p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 45), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 380), nPoints); g.drawPolygon(p); g.setColor(Color.YELLOW); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 135), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 380), nPoints); g.drawPolygon(p); g.setColor(Color.ORANGE); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); p = new Polygon(Utilities.getMoreXPoints(xPoints, HEX_CONSTANT + 225), Utilities.getMoreYPoints(yPoints, (HEX_CONSTANT / 9) + 380), nPoints); g.drawPolygon(p); g.setColor(Color.GRAY); g.fillPolygon(p); placeNumbers(g, p, isValidHex, hexValueIterator.next()); // repaint(); return g; }

    现在,绘画逻辑只读取hexValueList,而不修改它,因此,多久调用一次paint方法都没有关系。

    我也删除了flag = false;,因为它没有目的。 flag是方法参数,因此在方法内部更改其值对方法外部无效。

  • © www.soinside.com 2019 - 2024. All rights reserved.