Java 焦点事件监听器

标签 java events focus

我想知道如何添加焦点获得事件监听器。

目前我有一个鼠标事件正在添加到我的 J文本区域

   //=======================================================
   // mouse drag event
   //=======================================================

   public static class genDrag extends MouseMotionAdapter {
      JTextArea textarea;

      // receive textarea as argument
      public genDrag(JTextArea argTextarea) {
         textarea = argTextarea;
      }

      // add drag functionality to argument
      public void mouseDragged(MouseEvent E) {
         Point p = SwingUtilities.convertPoint(textarea, E.getPoint(), gc_gui.cv_content);
         textarea.setBounds((p.x - 40), (p.y - 15), 100, 30);
      }
   }

然后我可以使用它来调用

   //=======================================================
   // apply mouse event
   //=======================================================
   JTextArea textarea = new JTextArea();
   textarea.setBounds(50, 50, 100, 30);
   textarea.addMouseMotionListener(new genDrag(textarea));

这工作正常,但我无法重现相同的结果 focusGained 事件的功能

   //=======================================================
   // mouse focus event
   //=======================================================

   public static class genFocus extends EventListener {
      JTextArea textarea;

      public genFocus() {
         textarea = argTextarea;
      }

      public void focusGained(FocusEvent E) {
        System.out.println("Focus Triggered");
      }
   }

上面的内容看起来一点也不高兴

更新代码

static gui classGui;

public static void main(String[] args) {

   classGui = new gui();

   classGui.textarea.addMouseMotionListener(
       new genDrag(classGui.textarea)
   );

   classGui.textarea.addFocusListener(
      new genFocus(this)
   );

   classGui.frame.setVisible(true);

   public static class gui {
       JFrame frame;
       JPanel panel;
       JTextArea textarea;

       public gui() {
           frame = new JFrame();
           // configure JFrame here

           panel = new JPanel();
           // configure JPanel here

           textarea = new JTextArea();
           textarea.setBounds(50, 50, 100, 30);

           frame.add(textarea);
      }

   }

   public static class genDrag extends MouseMotionAdapter {
       JTextArea textarea;

       public genDrag(JTextArea argTextarea) {
           textarea = argTextarea;
       }

       public void mouseDragged(MouseEvent E) {
           Point p = SwingUtilities.convertPoint(textarea, E.getPoint(), gc_gui.cv_content);
           textarea.setBounds((p.x - 40), (p.y - 15), 100, 30);
       }
   }

   public static class genFocus implements FocusListener {
       JTextArea textarea;

       public genFocus(JTextArea argTextarea) {
           textarea = argTextarea;
       }

       public void focusGained(FocusEvent E) {
          System.out.println("Focus gained");
       }

       public void focusLost(FocusEvent E) {
          System.out.println("Focus lost");
       }
   }

}

最佳答案

要处理焦点事件,您的处理程序需要实现 FocusListener 接口(interface),而不是 EventListener。 请注意,您需要通过 addFocusListener 添加此处理程序。我不认为你这样做了,因为如果你这样做了,你会得到一个编译器错误,指出哪里出了问题。

使用@Override注释有助于发现此类错误。将其放在您认为应该覆盖父方法的每个方法之上。如果这样的方法实际上没有重写另一个方法,编译器将抛出错误。这样您就会收到错误通知,而不是您的程序默默地失败。

关于Java 焦点事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36998056/

相关文章:

java - 从java传递命令提示符函数

Java构造函数问题

c# - event 关键字的真正作用是什么?

c# - 隐藏扫描仪进度条窗口

c# - 将焦点设置回其父级?

java - JSR352 - 单个项目读取,多个项目写入

java - 如何将相同的值写入2个数据库?

Python 单行调用函数列表

javascript - jQuery UI 切换焦点在多个模式对话框上?

css - 如何在 Material-UI 中将 Select 组件设置为在选择其元素之一后松开其焦点状态