J'ai une fenêtre contextuelle qui affiche un TextField
sur le clic droit de celui-ci. Il se cache automatiquement, mais je veux l'empêcher de se cacher si la valeur du champ n'est pas un nombre. Comment consommer l'"événement de masquage" en cliquant ailleurs, sur la base d'une validation.
Voici mon code :
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Popup;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import org.apache.commons.lang3.math.NumberUtils;
public class Test extends Application
{
@Override
public void start(Stage primaryStage)
{
HBox root = new HBox();
TextField textField = new TextField();
Popup popup = new Popup();
popup.setAutoHide(true);
popup.getContent().clear();
popup.getContent().addAll(textField);
popup.setOnCloseRequest((WindowEvent event) ->
{
if (NumberUtils.isParsable(textField.getText()))
{
System.out.println("is a number");
textField.setStyle(null);
} else
{
System.out.println("enter a number");
textField.setStyle("-fx-border-color: red ; -fx-border-width: 1px ;");
event.consume();
}
});
Label label = new Label("click here");
StackPane labelPane = new StackPane(label);
label.setOnMouseClicked(event ->
{
if (event.getButton() == MouseButton.SECONDARY)
{
if (!popup.isShowing())
{
popup.show(labelPane, event.getScreenX() + 10, event.getScreenY());
}
}
});
root.getChildren().add(labelPane);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}