Java swing-在mouseclicked事件中使用范围外的布尔值?
您好,我想知道在鼠标点击事件中,您如何通过按钮响应不同的情况。我现在有一些Java swing-在mouseclicked事件中使用范围外的布尔值?,java,swing,button,mouseevent,actionlistener,Java,Swing,Button,Mouseevent,Actionlistener,您好,我想知道在鼠标点击事件中,您如何通过按钮响应不同的情况。我现在有一些 boolean x = false; btnExample.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { . . . 我希望鼠标选中的第一行是一个if语句,用于检查布尔值(x)是否为真/假。我想我的问题是如何访问这个变量(x),因为它必须被标记为final(这不是我想要
boolean x = false;
btnExample.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0) {
.
.
.
我希望鼠标选中的第一行是一个if语句,用于检查布尔值(x)是否为真/假。我想我的问题是如何访问这个变量(x),因为它必须被标记为final(这不是我想要的,因为我需要更改它)?我会在某个时刻将x改为true
e、 g
e、 g 1) 使该字段成为匿名类的类字段
btnExample.addMouseListener(new MouseAdapter() {
private boolean x = false;
@Override
public void mouseClicked(MouseEvent arg0) {
//code here
}
}
2) 或者建立一个私人的内部阶级
private class MyMouseListener extends MouseAdapter {
private boolean x = false;
//or you can inject via constructor or setter
@Override
public void mouseClicked(MouseEvent arg0) {
//code here
}
}
3) 或者将x
作为类中的实例变量,但仅当x
在类中使用或变异,而不仅仅是在匿名类中使用或变异时,才建议这样做
例如:
public class MyClass {
private boolean x = false;
public MyClass(){
btnExample.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
x = true;
}
}
}
}
1) 使该字段成为匿名类的类字段
btnExample.addMouseListener(new MouseAdapter() {
private boolean x = false;
@Override
public void mouseClicked(MouseEvent arg0) {
//code here
}
}
2) 或者建立一个私人的内部阶级
private class MyMouseListener extends MouseAdapter {
private boolean x = false;
//or you can inject via constructor or setter
@Override
public void mouseClicked(MouseEvent arg0) {
//code here
}
}
3) 或者将x
作为类中的实例变量,但仅当x
在类中使用或变异,而不仅仅是在匿名类中使用或变异时,才建议这样做
例如:
public class MyClass {
private boolean x = false;
public MyClass(){
btnExample.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
x = true;
}
}
}
}
为什么x必须标记为最终的?在没有看到更多信息的情况下,我会说在你的课堂上让x成为一个字段。为什么它必须被标记为最终字段?如果我尝试使用x,那么我是如何得到它的,它说它不能引用在不同方法中定义的内部类中的非最终变量。直接回答这个问题:您不能访问其范围之外的变量。在您的情况下使用JToggleButton可能是合理的。为什么x必须标记为最终变量?在没有看到更多信息的情况下,我会说在你的课堂上让x成为一个字段。为什么它必须被标记为最终字段?如果我尝试使用x,那么我是如何得到它的,它说它不能引用在不同方法中定义的内部类中的非最终变量。直接回答这个问题:您不能访问其范围之外的变量。在您的案例中使用JToggleButton可能是合理的。将布尔值设为类字段是什么意思?啊,您的第二点正是我这样做的原因这哈哈,也许我应该用actionlistener。谢谢。@Robert:请看上面的编辑。变量是在类中声明的,而不是在方法或构造函数中声明的。但这仍然不能解决问题。匿名内部类不能引用my main类中的变量,除非它们被标记为final。。“解决方案是将布尔值设为类字段…”类字段指静态字段,我想你的意思是
实例字段
将布尔值设为类字段是什么意思?啊,你的第二点正是我这样做的原因。哈哈,也许我应该用actionlistener。谢谢。@Robert:请看上面的编辑。变量是在类中声明的,而不是在方法或构造函数中声明的。但这仍然不能解决问题。匿名内部类不能引用my main类中的变量,除非它们被标记为final。。“解决方案是将布尔值设为类字段..”类字段指的是静态字段,我认为您的意思是实例字段
,但其他按钮也需要访问此变量。此变量不限于此单鼠标侦听器。@Robert请将其作为实例变量@罗伯特,一点也不!仅当它是局部变量时才标记为final!请参阅我的3个解决方案。第三是你需要的!但其他按钮也需要访问此变量。此变量不限于此单鼠标侦听器。@Robert请将其作为实例变量@罗伯特,一点也不!仅当它是局部变量时才标记为final!请参阅我的3个解决方案。第三是你需要的!