我正在进行国际象棋比赛,我想让玩家选择棋盘的颜色。因此我将使用这种方法:
static void createBoard(Graphics g) {
Color bright = new Color(255, 225, 181); //player chooses color
Color dark = new Color(188, 141, 105); //player chooses color
boolean darkTile = false;
for (int y = spaceY; y < (spaceY + BOARDHEIGHT); y += TILESIZE) {
for (int x = spaceX; x < (spaceX + BOARDWIDTH); x += TILESIZE) {
if (darkTile) {
g.setColor(dark);
} else {
g.setColor(bright);
}
g.fillRect(x, y, TILESIZE, TILESIZE);
darkTile = !darkTile;
}
darkTile = !darkTile;
}
BufferedImage overlay;
try {
overlay = ImageIO.read(new File("overlay.png"));
JLabel label = new JLabel(new ImageIcon(overlay));
g.drawImage(overlay, spaceX, spaceY, BOARDWIDTH, BOARDHEIGHT, null);
} catch (IOException e) {}
}
这个我想保存为BufferedImage,所以我不必一直运行这个方法。
那么如何在没有国际象棋棋盘之外的东西的情况下保存我的JPanel的这一部分呢? (会有更多画)
答案 0 :(得分:2)
我想保存为BufferedImage,
不知道您需要将BufferedImage保存到文件中。您可以在应用程序启动时创建应用程序使用的BufferedImage。然后,如果任何用户颜色发生变化,您可以重新创建BufferedImage。
您可以直接绘制到BufferedImage:
BufferedImage image = new BufferedImage(boardSize, boardSize, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
// draw the squares onto board
g2d.dispose();
现在你的createBoard()方法应该返回BufferedImage,以便你的应用程序可以使用它。
答案 1 :(得分:1)
你付出了一些努力来提出你的问题,所以让我们通过一些想法来表达你的想法。
首先:你有一个空的catch块{}。这是不好的做法。这只会消除您收到的任何错误消息。这没有用。允许该异常冒泡并停止您的应用程序;或至少打印其内容 - 以便您了解会发生什么。
鉴于您的评论:如果出现错误,您现在永远不会。特别是在做IO时,各种各样的事情都可能出错。请相信我:空捕获块糟糕练习;你不应该训练自己接受它们。
第二个想法:不要那样做。听起来很方便;但保存背景图片并没有增加太多价值。
您无需担心此代码;当您的应用程序出现时,它会执行一次。
所以,真正的答案是:关注你想要实现的功能;并且不要因pre-mature optimizations而分心。