Java: как сделать щелчок для TextField?

Я хочу, чтобы мое текстовое поле очищало текст, когда кто-то щелкает его. Как я могу это сделать?


person Strawberry    schedule 01.12.2010    source источник
comment
Это java JTextField?   -  person Buhake Sindi    schedule 01.12.2010


Ответы (3)


на java.awt.TextField вы можете добавить MouseListener вот так

TextField field = new TextField();
field.addMouseListener(new MouseListener() {

    public void mouseClicked(MouseEvent e) {

    }

    public void mousePressed(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }

});

Причина в том, что java.awt.TextField является подклассом java.awt.TextComponent (который, в свою очередь, является подклассом java.awt.Component). Класс Component имеет метод addMouseListener().

В качестве альтернативы вы можете заменить MouseListener на java.awt.event.MouseAdapter, если он инкапсулирует все методы MouseListener, MouseWheelListener и MouseMotionListener.

Из JavaDoc (из MouseAdapter):

Абстрактный класс адаптера для получения событий мыши. Методы в этом классе пусты. Этот класс существует для удобства создания объектов-слушателей.

События мыши позволяют отслеживать, когда мышь нажимается, отпускается, щелкает, перемещается, перетаскивается, когда она входит в компонент, когда она выходит и когда перемещается колесико мыши.

person Buhake Sindi    schedule 01.12.2010
comment
Несмотря на то, что я использую только MousePressed, почему eclipse заставляет меня иметь пустые функции для всех остальных? - person Strawberry; 01.12.2010
comment
@Doug, потому что вы реализуете интерфейс, а не абстрактный класс. Если вам нужен только mousePressed, используйте вместо него MouseAdapter. - person Buhake Sindi; 01.12.2010

Возможно, вам нужно addMouseListener().

upd Это было бы похоже на smt

TextField a = ...;
  a.addMouseListener(new MouseAdapter(){
   public void mouseReleased(MouseEvent e) {
    //some stuff
   }
});

upd2 исправить keyListener на MouseListener

person Stan Kurilin    schedule 01.12.2010
comment
Не могли бы вы напечатать свои ответы на связном английском языке? - person ; 01.12.2010
comment
@ Гленн Нельсон, извини. Я пытаюсь. Будет здорово, если вы расскажете о моих ошибках. - person Stan Kurilin; 01.12.2010
comment
@ Стас, так что это отменилось ... Теперь я понял. - person Buhake Sindi; 01.12.2010

Попробуйте это:

  TextField.setText("defaultText");

    TextField.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            reSet(evt);
        }
    });

  TextField.addFocusListener(new java.awt.event.FocusAdapter() {
        public void focusGained(java.awt.event.FocusEvent evt) {
            reSet(evt);
        }
  });

  void reSet(java.awt.event.KeyEvent evt) {
      String temp = jTextField1.getText();
      TextField.setText(temp.equals("defaultText")? "" : temp);
  }
person Mohamed Saligh    schedule 01.12.2010
comment
Не уверен здесь: не всегда ли focusGained(FocusEvent) запускается, когда Component получает фокус, то есть когда вы нажимаете Alt + Tab на свой JFrame? - person Przemek Kryger; 01.12.2010