Package com.slmn.visitor.gui

Source Code of com.slmn.visitor.gui.Leaf

package com.slmn.visitor.gui;

import javafx.event.Event;
import javafx.geometry.Bounds;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.HBox;

import com.slmn.visitor.gui.Component.HChild;

//import java.awt.Robot;

public class Leaf extends Component implements HChild {

  private final TextField input = new TextField("Leaf.Input");
  private final Label display = new Label("Leaf.Display");
  private final HBox leaf = new HBox();

  // private static Robot robot;

  public Leaf(String value) {
    display.setFocusTraversable(true);
    leaf.setAlignment(Pos.CENTER);
    leaf.setPadding(new Insets(0, SPACE, 0, SPACE));
//    leaf.setStyle("-fx-border-color: red;");
//    display.getStyleClass().setAll("display");
//    input.getStyleClass().setAll("input");
    input.setPrefWidth(100);
    display.setText(value);
    input.setText(value);
    leaf.getChildren().add(display);
    display.setOnMouseClicked(mouseEvent -> {
      if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
        if (mouseEvent.getClickCount() == 2) {
          leaf.getChildren().clear();
          leaf.getChildren().add(input);
          leaf.setStyle(null);
          input.requestFocus();
        } else {
          display.requestFocus();
        }
       
        mouseEvent.consume();
      }
    });
    input.setOnKeyPressed(keyEvent -> {
      if (keyEvent.getCode() == KeyCode.ENTER) {
        keyEvent.consume();
        KeyEvent tab = new KeyEvent(keyEvent.getEventType(), null,
            null, KeyCode.TAB, false, false, false, false);
        Event.fireEvent(keyEvent.getTarget(), tab);
        // if (robot == null)
        // try {
        // robot = new Robot();
        // } catch (Exception e) {
        // e.printStackTrace();
        // }
        // robot.keyPress( java.awt.event.KeyEvent.VK_TAB );
        // robot.keyRelease( java.awt.event.KeyEvent.VK_TAB );
        // keyEvent.consume();

      }
    });
    input.focusedProperty().addListener(
        (observable, oldValue, newValue) -> {
          if (newValue == oldValue) {
            return;
          }
          if (!newValue) {
            display.setStyle(null);
            leaf.getChildren().clear();
            display.setText(input.getText());
            leaf.getChildren().add(display);
          }
        });
    display.focusedProperty().addListener(
        (observable, oldValue, newValue) -> {
          if (newValue == oldValue) {
            return;
          }
          if (!newValue) {
            Cursor.clearCursor();
          } else {
            Cursor.setCursor(this);
          }
        });
  }

  @Override
  public final Node getNode() {
    return leaf;
  }

  @Override
  public HComposite getHParent() {
    return (HComposite) getParent();
  }

  @Override
  public Bounds getCBounds() {
    return display.localToScene(display.getLayoutBounds());
  }

  @Override
  public void addCursor() {
    if (!leaf.getChildren().contains(Cursor.prompt)) {
      leaf.getChildren().add(Cursor.prompt);
    }
  }

  @Override
  public void setCNodesBG(CNodeState state) {
    display.setStyle(state.getStyle());
  }
}
TOP

Related Classes of com.slmn.visitor.gui.Leaf

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.