Java 鼠标单击以选择布尔值
java开发新手您好,我在一个线程中创建了一个Java 鼠标单击以选择布尔值,java,swing,Java,Swing,java开发新手您好,我在一个线程中创建了一个MouseListener和MouseAdapter,用于控制鼠标按下、释放和拖动操作的鼠标动作。每个动作都会做特定的事情,但我无法将每个动作中的每个MouseEvent e分配给一个变量 那么,我们如何处理这个问题呢?我还想知道方法参数MouseEvent e是否特定于每个方法 这是我的密码: Thread thread = new Thread() { public void run() { addMouseListener(n
MouseListener
和MouseAdapter
,用于控制鼠标按下、释放和拖动操作的鼠标动作。每个动作都会做特定的事情,但我无法将每个动作中的每个MouseEvent e
分配给一个变量
那么,我们如何处理这个问题呢?我还想知道方法参数MouseEvent e
是否特定于每个方法
这是我的密码:
Thread thread = new Thread() {
public void run() {
addMouseListener(new MouseAdapter() {
//@override deleted because i want to use e as a different action.
public void mouseaction(MouseEvent e) {
/* In here i want to control MouseEvent e action
(drag, pressed and released) and do specific things in with e event
and if e changes state should be changed in code during while(true) */
}
}
}
通过调用方法
getModifiersEx()
,可以从mouseEvent
获取所有这些信息,例如:
int eventType = e.getModifiersEx();
if (eventType & MOUSE_DRAGGED > 0) {
// Code to be executed when mouse is dragged
}
if (eventType & MOUSE_PRESSED > 0) {
// Code to be executed when mouse button is pressed
}
...
请注意,
eventType
是一个位字段,其中可以同时激活多个位。您可以通过调用方法getModifiersEx()
从mouseEvent
获取所有这些信息,例如:
int eventType = e.getModifiersEx();
if (eventType & MOUSE_DRAGGED > 0) {
// Code to be executed when mouse is dragged
}
if (eventType & MOUSE_PRESSED > 0) {
// Code to be executed when mouse button is pressed
}
...
请注意,
eventType
是一个位字段,可以同时激活多个位。我将解决这个问题:
我还想知道方法参数MouseEvent e是否特定于每个方法
每次Swing调用此方法时,都会生成一个新事件。您的@Override
注释没有任何区别
因此,当用户单击某个位置时,会为其生成一个编号为2556的MouseEvent,并将该事件作为参数调用该方法
当用户拖动鼠标时,将生成编号为2557的MouseEvent,并再次使用此新事件作为参数调用该方法
更广泛地说:所有那些
MouseEvent
s将始终是不同的实例。它们也是不可变的
这意味着,如果您想保存一些信息以供游戏循环查看,则需要将相关条件存储在某个字段中。您将无法从匿名类访问它,因为您没有对它的句柄。下面是一个快速而肮脏的例子(无耻地重用@FrankPuffer的代码):
我将解决这个问题: 我还想知道方法参数MouseEvent e是否特定于每个方法 每次Swing调用此方法时,都会生成一个新事件。您的
@Override
注释没有任何区别
因此,当用户单击某个位置时,会为其生成一个编号为2556的MouseEvent,并将该事件作为参数调用该方法
当用户拖动鼠标时,将生成编号为2557的MouseEvent,并再次使用此新事件作为参数调用该方法
更广泛地说:所有那些
MouseEvent
s将始终是不同的实例。它们也是不可变的
这意味着,如果您想保存一些信息以供游戏循环查看,则需要将相关条件存储在某个字段中。您将无法从匿名类访问它,因为您没有对它的句柄。下面是一个快速而肮脏的例子(无耻地重用@FrankPuffer的代码):
你不能只是编方法名。您需要实现侦听器的方法。您需要分别处理mousePressed和MouseRelease方法。对于mouseDragged,您需要实现MouseMotionListener
阅读上的Swing教程中的部分。您可以找到以下部分:
这两个都包含工作示例。顺便说一句,你不需要单独的线程来添加鼠标侦听器。顺便说一句,你不需要单独的线程来添加鼠标侦听器。既然你在最后告诉它,你可以有多个修饰符,所以
else if
不是一个好主意,如果多个,则最好确保每个cases@AxelH:是的,我修改了我的答案。@FrankPuffer int eventType=e.getModifiersEx();每一次返回0action@Zeki切里克:我纠正了我的错误,你可以检查二进制&
的结果是否大于零。(我很困惑,因为在C++语言中,你可以使用<代码> int /CUT>作为布尔值,而在java中则无效。)因为你在最后告诉它,你可以有多个修饰符,所以<代码>如果不是< /C> >不是多好的代码,多个<代码>如果最好是每一个都要测试。cases@AxelH:对,已修改我的答案。@FrankPuffer int eventType=e.getModifiersEx();每一次返回0action@Zeki切里克:我纠正了我的错误,你可以检查二进制&
的结果是否大于零。(我很困惑,因为在C++语言中,你可以使用<代码> int /CODE >作为布尔值,而在java中则无效。)如果(EntyType和MouthEnguly.MousEpHress)是int,编译器说它不能转换。但是,如果(EngType和MouthEnguly.MousEnPress)是int,编译器就不能转换它。
//@override deleted because i want to use e as a different action.
public void mouseaction(MouseEvent e)