java - 访问我自己的 EventListener 方法

标签 java events overriding listener

我在我的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/

相关文章:

java - Spring AOP && MVC 的排序方面

jquery - 动态 select2 不触发更改事件

java - 在GUI线程中触发异步事件

javascript - 使用 GreaseMonkey 在 Javascript 中模拟 Enter 键按下

java - 如何通过 GET/POST 安全地发送密码?

java - 如何在java中替换大文件末尾的字符串?

javascript - 如何重写 CodeceptJS 中的函数

java - 如果视频不播放,如何覆盖发生的情况?

java - 重写父类(super class)中的方法

java - 如何动态构建 JMenu(而不仅仅是运行时创建)?