簡體   English   中英

Java焦點事件監聽器

[英]Java Focus Event Listener

我想知道如何添加一個焦點獲得的事件監聽器。

目前我有一個鼠標事件被添加到我的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");
       }
   }

}

要處理焦點事件,處理程序需要實現FocusListener接口而不是EventListener 請注意,您需要通過addFocusListener添加此處理程序。 我不認為你這樣做了,因為如果你這樣做了,你會得到一個編譯器錯誤,表明錯誤。

使用@Override注釋有助於發現此類錯誤。 將它放在您認為應該覆蓋父方法的每個方法之上。 如果這樣的方法實際上沒有覆蓋另一個方法,編譯器將拋出一個錯誤。 通過這種方式,您可以了解錯誤,而不是您的程序無聲地失敗。

你應該向控件JTextArea添加一個event-listener ,然后它才能處理任何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

謝謝。

我想正是你需要的......

只是一個提示:你的類genFocus(更喜歡遵循代碼約定:GenFocus)應該實現FocusListener。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM