【发布时间】:2015-12-23 23:17:45
【问题描述】:
我正在尝试创建一个扩展 BufferedImage 的简单 Card 类,以便我可以直接在屏幕上绘制卡片。但是这张卡有两个面。前面,还有后面。我包括一个翻转(布尔面朝上)方法,我想将图像从一侧更改为另一侧,但似乎由于类扩展了 BufferedImage,它是最终的?我不确定,这是我的印象。它不会改变构造函数中绘制的原始图像。有什么办法可以让我仍然可以直接在屏幕上绘制卡片吗?这就是我目前所拥有的......
public Card(int rank, int suit)
{
super(50,70,TYPE_INT_ARGB);
this.rank = rank;
this.suit = suit;
try{bi = ImageIO.read(getClass().getResource(toString()+".png"));
back = ImageIO.read(getClass().getResource("back.png"));}
catch(IOException e){e.printStackTrace();}
Graphics2D g = createGraphics();
g.drawImage(back,0,0,null);
g.dispose();
}
public void flip(boolean faceup)
{
this.faceup = faceup;
Graphics2D g = createGraphics();
if(faceup)g.drawImage(bi,0,0,null);
else g.drawImage(back,0,0,null);
g.dispose();
}
【问题讨论】:
-
虽然我通常不建议扩展
BufferedImage(按照@camickr 的说法,创建一个包含两个图像的Card类),但我确实认为您的方法可行。请记住,BufferedImages 在更改时不会重新绘制自己。调用flip()后,您必须发出repaint()(假设是Swing 应用程序)。
标签: java graphics bufferedimage final extends