gpt4 book ai didi

java - 单击鼠标绘制矩形 - 不显示

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:06 24 4
gpt4 key购买 nike

我正在尝试在我正在制作的游戏(麻将纸牌)中“突出显示”一个图 block 对象。为此,我在与图 block 相同的位置绘制了一个 Rectangle2D 对象,并尝试在单击鼠标时显示它。

我能够让鼠标单击事件起作用并识别何时选择图 block ,但由于某种原因,当我在 mousePressed 函数中时,不会绘制矩形。我似乎不明白为什么......

这是我认为相关的代码 - 如果需要我可以扩展它!

/* Above this, the positions of tiles are set */

if (content[i][y][x].isVisible()) {

/* Draws the image to screen at the appropriate location */
graphics.drawImage(image, x*TILEW+TILEW/2+i*TILESKEW, (y+1)*TILEH/2-i*TILESKEW,null);

}

/* Represents the area around a tile, so that you can determine
* whether appropriate area pressed within a tile */
final Rectangle2D rect = new Rectangle2D.Double(x*TILEW+TILEW/2+i*TILESKEW,(y+1)*TILEH/2-i*TILESKEW, image.getWidth(null), image.getHeight(null));

/* Set colour of border rectangle */
graphics.setColor(Color.red);

/* Store positions and sizes of tile objects */
final int xPos = x*TILEW+TILEW/2+i*TILESKEW;
final int yPos = (y+1)*TILEH/2-i*TILESKEW;
final int height = image.getHeight(null)+2;

/* This works - outside of the mouse event */
//graphics.drawRoundRect(xPos, yPos, width, height, 7, 7);

/* Mouse event */
addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent me) {

/* Draw the rectangle to the screen -- Doesn't display! */
graphics.drawRoundRect(xPos, yPos, width, height, 7, 7);
}

“图形”Graphic 对象被传递给函数:

public void paintComponent(final Graphics graphics) { ... }

如有任何建议,我们将不胜感激!预先感谢您的帮助!

最佳答案

您的程序结构听起来很不对劲,因为您通常不应该让 MouseListener 直接操作传递给 PaintComponent 的 Graphics 对象。原因是通过这种方式获得的 Graphics 对象不会持久存在。通常,您将让 MouseAdapter(MouseListener 和 MouseMotionListener)更改类字段,然后在组件上调用 repaint()。然后paintComponent使用鼠标适配器设置的字段来绘制矩形。

编辑 1
例如,请在此处查看我的示例程序:drawing-a-rectangle-over-an-existing-graphics-page

关于java - 单击鼠标绘制矩形 - 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8115757/

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