У меня есть всплывающее окно, которое показывает TextField
по правому клику. Он автоматически скрывается, но я хочу предотвратить его скрытие, если значение в поле не является числом. Как вы потребляете «событие скрытия» при нажатии, основываясь на некоторой проверке.
Вот мой код:
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);
}
}