我在我的CaretListener
“as”中创建了一个方法mames“si()”,但我无法调用它,错误显示“找不到符号”有人可以告诉我为什么我找不到这个方法
public class FoxTable {
private boolean TECLADO=false;
public FoxTable(){
Accion();
}
private void Accion() {
CaretListener as=new CaretListener() {
@Override public void caretUpdate(CaretEvent e) {
TECLADO=true;
System.out.println(e.getDot()+" Dot");
System.out.println(e.getMark()+" Mark");
}
public boolean si(){
if(TECLADO){TECLADO=false;return true;}
return true;
}
};
KeyAdapter focus=new KeyAdapter() {
@Override public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case 10:
e.getComponent().transferFocus();
as.si();
break;
}
}
};
}
}
感谢您的回答和建议!
最佳答案
因为您的匿名 KeyAdapter 内部类在其范围内没有“as”实例。
您可以考虑将“as”实例作为属性或匿名 KeyAdapter 内部类传递。
编辑
所以,我将“as”实例变量传递给匿名内部类的想法行不通,请看一下以下堆栈溢出问题: Accessing constructor of an anonymous class
因此,我建议将 si() 方法从 CaretListener 匿名内部类移至 FoxTable 类。然后两个匿名内部类都可以根据需要调用该方法。
public class FoxTable {
private boolean teclado = false;
public FoxTable (){
Accion();
}
public boolean si(){
if (teclado) {
teclado = false;
return true;
}
return true;
}
private void Accion() {
CaretListener as = new CaretListener() {
public void caretUpdate(CaretEvent e) {
teclado = true;
System.out.println(e.getDot()+" Dot");
System.out.println(e.getMark()+" Mark");
}
};
KeyAdapter focus = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case 10:
e.getComponent().transferFocus();
si();
break;
}
}
};
}
编辑 X 2
所以,如果您必须在内部类中使用 si() 方法,这是我知道的唯一方法。您将无法使用匿名内部类,您将需要使用声明的内部类,然后扩展您正在使用的两个不同监听器的接口(interface)。
public class FoxTable {
private boolean TECLADO=false;
public FoxTable(){
Accion();
}
private void Accion() {
ExtendedCaretListener as = new ExtendedCaretListener();
KeyAdapter focus = new ExtendedKeyAdapter(as);
}
public class ExtendedCaretListener implements CaretListener {
public void caretUpdate(CaretEvent e) {
TECLADO=true;
System.out.println(e.getDot()+" Dot");
System.out.println(e.getMark()+" Mark");
}
public boolean si(){
if(TECLADO){
TECLADO=false;
return true;
}
return true;
}
}
public class ExtendedKeyAdapter implements KeyAdapter {
ExtendedCaretListener as = null;
public ExtendedKeyAdapter(ExtendedCaretListener as) {
this.as = as;
}
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case 10:
e.getComponent().transferFocus();
as.si();
break;
}
}
}
}
也许其他人能够以不同的方式来实现这一点。
关于java - 访问我自己的 EventListener 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151218/