< prev index next >

modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextFieldSkinAndroid.java

Print this page
*** 24,33 ***
   */
  
  package javafx.scene.control.skin;
  
  import javafx.beans.value.ChangeListener;
! import javafx.beans.value.ObservableValue;
  import javafx.scene.control.TextField;
! 
- import com.sun.javafx.scene.control.behavior.TextFieldBehavior;
- import javafx.scene.control.skin.TextFieldSkin;
  
  public class TextFieldSkinAndroid extends TextFieldSkin {
  
      public TextFieldSkinAndroid(final TextField textField) {
          super(textField);
  
!         textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
!             public void changed(ObservableValue<? extends Boolean> observable,
!                     Boolean wasFocused, Boolean isFocused) {
!                 if (textField.isEditable()) {
!                     if (isFocused) {
!                         showSoftwareKeyboard();
!                     } else {
!                         hideSoftwareKeyboard();
!                     }
!                 }
!             }
!         });
      }
  
      native void showSoftwareKeyboard();
      native void hideSoftwareKeyboard();
  
--- 24,61 ---
   */
  
  package javafx.scene.control.skin;
  
  import javafx.beans.value.ChangeListener;
! import javafx.beans.value.WeakChangeListener;
+ import javafx.event.EventHandler;
  import javafx.scene.control.TextField;
! import javafx.scene.input.MouseEvent;
  
  public class TextFieldSkinAndroid extends TextFieldSkin {
  
+     /**************************************************************************
+      *
+      * Private fields
+      *
+      **************************************************************************/
+ 
+     private final EventHandler<MouseEvent> mouseEventListener = e -> {
+         if (getSkinnable().isEditable() && getSkinnable().isFocused()) {
+             showSoftwareKeyboard();
+         }
+     };
+ 
+     private final ChangeListener<Boolean> focusChangeListener = (observable, wasFocused, isFocused) -> {
+         if (wasFocused && !isFocused) {
+             hideSoftwareKeyboard();
+         }
+     };
+     private final WeakChangeListener<Boolean> weakFocusChangeListener = new WeakChangeListener<>(focusChangeListener);
+ 
+     /**************************************************************************
+      *
+      * Constructors
+      *
+      **************************************************************************/
+ 
      public TextFieldSkinAndroid(final TextField textField) {
          super(textField);
  
!         textField.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventListener);
!         textField.focusedProperty().addListener(weakFocusChangeListener);
!     }
! 
!     /***************************************************************************
!      *                                                                         *
!      * Public API                                                              *
!      *                                                                         *
!      **************************************************************************/
! 
!     /** {@inheritDoc} */
!     @Override public void dispose() {
+         if (getSkinnable() == null) return;
+         getSkinnable().removeEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventListener);
+         getSkinnable().focusedProperty().removeListener(weakFocusChangeListener);
+         super.dispose();
      }
  
      native void showSoftwareKeyboard();
      native void hideSoftwareKeyboard();
  
< prev index next >