Java焦点事件监听器

时间:2016-05-03 07:21:29

标签: java events focus

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

目前我有一个鼠标事件正在添加到我的 JTextareas

   //=======================================================
   // 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");
       }
   }

}

3 个答案:

答案 0 :(得分:2)

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

使用@Override注释有助于发现此类错误。将它放在您认为应该覆盖父方法的每个方法之上。如果这样的方法实际上没有覆盖另一个方法,编译器将抛出一个错误。通过这种方式,您可以了解错误,而不是您的程序无声地失败。

答案 1 :(得分:1)

您应该向控件event-listener添加JTextArea,然后才能处理任何event请求。

JTextField textarea= new JTextField("Value");
textarea.addFocusListener(new genFocus(textarea)); //this peice of code will add an listener to you textarea Object of JTextField.

您的鼠标侦听器将起作用,因为您已向JTextArea添加了鼠标事件侦听器。

textarea.addMouseMotionListener(new genDrag(textarea));//code to add MouseMotionListener.

但是FocusEvent没有注册JTextArea

感谢。

答案 2 :(得分:0)

我认为this正是您所需要的......

只是一个提示:你的类genFocus(更喜欢遵循代码约定:GenFocus)应该实现FocusListener。