0

我目前正在编写一个 Connect 4 Applet 游戏,并且我已经实现了所有 AI 逻辑。现在我需要设计一个简单的 gui,这样我就可以玩了。
我有一张我想使用的棋盘图像(透明 png),我希望能够通过单击图像来执行移动(例如,在我想玩的特定列上)。

这样做的最佳方法是什么?我想使用一个扩展 JPanel 的类,我把所有的按钮和东西放在那里……包括画板图像。但是我可以在图像上放一个鼠标监听器吗?

4

3 回答 3

4

“但是我可以在图像上放一个鼠标监听器吗??”

不,或者至少,不是在你所想的上下文中。

根据您想要实现的目标,您有几个选择。

但是,基本要求是您需要确切知道每个点击点在图像上的位置。这最好通过使用图像编辑程序来绘制“热点”,然后将它们编码到您的程序中来实现

你可以...

使用 aJLabel渲染板图像并将 a 附加MouseListener到它。

我遇到的问题是试图弄清楚如何使用播放器标记更新图像。

你可以...

使用 aJPanel并覆盖它paintComponent来渲染图像和玩家移动/标记。

然后,您将添加一个MouseListener并从那里监视鼠标点击。

无论您使用哪种方法,我都可能会创建一个代表用户可以点击的热点的Listof s。Rectangle每次mousePressed调用时,我都会遍历此列表并使用Rectangle#contains(Point),通过鼠标单击点来确定单击了哪个热点。

然后,您将把它与游戏模型进行比较,以确定它是否是有效的移动,并根据需要采取适当的行动。

查看如何编写鼠标侦听器执行自定义绘画以获取更多详细信息

于 2013-07-29T02:39:55.680 回答
2

JToggleButton在 4x4(?) 中使用 16(?) 个对象GridLayout

如在面板中添加复杂图像的答案中所示,从按钮中剔除空间和背景,并在一个自定义用户界面中使用按钮围绕它

相关:如何使用

方法的优点

  • 不需要extend任何组件。我们可以使用布局、按钮和容器的“香草”版本。这有利于组合而不是继承。
  • 游戏的逻辑可以通过改变按钮的图标来表示。GUI 将根据需要更新。
  • 它节省了所有逻辑的编码来检测哪个图像被点击。添加一个ActionListener按钮将响应鼠标焦点/单击或键盘焦点/动作。
于 2013-07-29T05:30:50.920 回答
0

为什么要将鼠标侦听器添加到图像?如果你的类实现了mouselistener,你可以告诉鼠标点击时要做什么或其他什么。看一看 :

public class Test extends JPanel implements MouseListener {
        .
        .
        .
    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }
}
于 2013-07-29T02:38:26.377 回答