我目前正在编写一个Connect 4 Applet游戏,我已经实现了所有的AI逻辑。现在我需要设计一个简单的gui,这样我就可以玩了 我有一个我想要使用的板的图像(透明的png),我希望能够通过点击图像(例如我想要播放的特定列)来执行移动。
这样做的最佳方式是什么?我想使用一个扩展JPanel的类,我把所有的按钮和东西放在里面......包括画板图像。但我可以在图像上放一个鼠标监听器吗?
答案 0 :(得分:4)
“但我可以将鼠标监听器放在图像上吗?”
不,或者至少,不在你想的背景下。
根据您想要达到的目标,您有几个选择。
但基本要求是,您需要准确了解每个点击点在图像上的位置。最好通过使用图像编辑程序来绘制“热点”,然后将这些编码到程序中
来实现使用JLabel
呈现电路板图像并附加MouseListener
。
我遇到的问题是试图找出如何使用播放器标记更新图像。
使用JPanel
并覆盖它paintComponent
以渲染图像和播放器移动/标记。
然后,您可以向其添加MouseListener
并监控鼠标点击次数。
无论您使用哪种方法,我都可能会创建List
Rectangle
个mousePressed
来代表用户可以点击的热点。每次调用Rectangle#contains(Point)
时,我都会走这个列表并使用{{1}},通过鼠标点击点来确定点击了哪个热点。
然后,您可以将其与游戏模型进行比较,以确定它是否有效,并根据需要采取适当的措施。
请查看How to write a Mouse Listener和Performing custom painting了解详情
答案 1 :(得分:2)
在4x4(?)JToggleButton
中使用16(?)GridLayout
个对象。
敲开空间&在Add a complex image in the panel, with buttons around it in one customized user interface的答案中看到的按钮背景。
extend
任何组件。我们可以使用布局,按钮和容器的'vanilla'版本。这有利于构成而不是继承。ActionListener
按钮将响应鼠标焦点/单击或键盘焦点/操作。答案 2 :(得分: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
}
}