Java 访问我自己的EventListener方法
我在我的Java 访问我自己的EventListener方法,java,events,overriding,listener,Java,Events,Overriding,Listener,我在我的CaretListener中创建了一个方法mames“si()”作为“但是我不能调用它,错误是“找不到符号”。有人可以告诉我为什么找不到这个方法 public class FoxTable { private boolean TECLADO=false; public FoxTable(){ Accion(); } private void Accion() { CaretListener
CaretListener
中创建了一个方法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”实例
您可以考虑将AAS实例作为属性或匿名密钥适配器内部类传递。
编辑 因此,我将“as”实例变量传递给匿名内部类的想法是行不通的,请看一下下面的堆栈溢出问题: 因此,我建议将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;
}
}
};
}
编辑x2
因此,如果必须在内部类中使用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;
}
}
}
}
也许其他人能够以不同的方式参与进来。因为匿名KeyAdapter内部类的作用域中没有“as”实例
您可以考虑将AAS实例作为属性或匿名密钥适配器内部类传递。
编辑 因此,我将“as”实例变量传递给匿名内部类的想法是行不通的,请看一下下面的堆栈溢出问题: 因此,我建议将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;
}
}
};
}
编辑x2
因此,如果必须在内部类中使用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;
}
}
}
}
也许其他人能够以不同的方式参与进来。因为匿名KeyAdapter内部类的作用域中没有“as”实例
您可以考虑将AAS实例作为属性或匿名密钥适配器内部类传递。
编辑 因此,我将“as”实例变量传递给匿名内部类的想法是行不通的,请看一下下面的堆栈溢出问题: 因此,我建议将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;
}
}
};
}
编辑x2
因此,如果必须在内部类中使用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;
}
}
}
}
也许其他人能够以不同的方式参与进来。因为匿名KeyAdapter内部类的作用域中没有“as”实例
您可以考虑将AAS实例作为属性或匿名密钥适配器内部类传递。
编辑 因此,我将“as”实例变量传递给匿名内部类的想法是行不通的,请看一下下面的堆栈溢出问题: 因此,我建议将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;
}
}
};
}
编辑x2
因此,如果必须在内部类中使用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;
}
}
}
}
也许其他人可以用另一种方法来实现这一点。将它放入我的KeyAdapter内部类中是不起作用的,但问题是相同的。因此,我们可能需要看到更多的代码。您只显示了两个试图访问名为TECLADO的parents属性的匿名内部类。你能告诉我们TECLADO是如何在父类中使用的吗?我们不需要整个类,但是多编译一些代码会很有帮助。如果你有时间,你能更新上面问题中的代码吗?我不认为注释部分很好地接受代码片段。是的,它是这样工作的,但我想要的是在内部类中使用方法,谢谢你的回答。我不认为你将能够做你试图做的匿名内部类。匿名内部类无法添加到其公共接口。这意味着,如果您查看CaretListener接口,这些是匿名CaretListener之外的类可以调用的唯一方法。匿名KeyAdapter将无法看到该si()方法。实际上,您必须创建一个扩展CaretListener的声明类间类,以便添加si()方法。如果将它放入我的KeyAdapter内部类中,则不起作用,但问题是相同的。因此,我们可能需要查看更多的代码。您只显示了两个试图访问名为TECLADO的parents属性的匿名内部类。你能告诉我们TECLADO是如何在父类中使用的吗?我们不需要整个类,但是多编译一些代码会很有帮助。如果你有时间,你能更新上面问题中的代码吗?我不认为评论部分是正确的