我做了一个方法mames" si()"在我的CaretListener
" as"但我不能称之为,错误说"找不到符号"有人可以告诉我为什么我找不到这个方法
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;
}
}
};
}
}
感谢您的回答和建议!
答案 0 :(得分:3)
因为您的匿名KeyAdapter内部类没有' as'范围内的实例。
你可以考虑将你的'作为' instance作为属性或您的匿名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()方法,这是我知道这样做的唯一方法。您将无法使用匿名内部类,您将需要使用已声明的内部类,然后扩展您正在使用的两个不同侦听器的接口。
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;
}
}
}
}
也许其他人可以通过不同的方式来实现这一目标。