package bugs.dialog.RT24855;
import com.sun.javafx.collections.ObservableListWrapper;
import javafx.application.Application;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Callback;
import java.util.Arrays;
public class OpenDialogStageFromMenuItemActionLeavesSystemInUnResponsiveState extends Application{
public static void main(String [] args){
launch(args);
}
private static class OpenApplicationModalDialog implements EventHandler<ActionEvent> {
private Stage parent;
public OpenApplicationModalDialog(Stage parent) {
this.parent = parent;
}
@Override
public void handle(ActionEvent actionEvent) {
Stage modalStage = new Stage();
BorderPane borderPane = new BorderPane();
borderPane.setPrefHeight(200);
borderPane.setPrefWidth(400);
borderPane.setCenter(new Label("look at me"));
modalStage.setScene(new Scene(borderPane));
modalStage.initOwner(parent);
modalStage.initModality(Modality.APPLICATION_MODAL);
modalStage.initStyle(StageStyle.UTILITY);
modalStage.showAndWait();
}
}
@Override
public void start(final Stage stage) throws Exception {
TableView<String> table = createTableWithContextMenu(new OpenApplicationModalDialog(stage));
FlowPane pane = new FlowPane();
pane.getChildren().add(table);
stage.setScene(new Scene(pane));
stage.show();
}
private TableView<String> createTableWithContextMenu(final OpenApplicationModalDialog contextMenuAction) {
TableView<String> table = new TableView<>();
table.setItems(new ObservableListWrapper<>(Arrays.asList("one")));
TableColumn<String, String> column = new TableColumn<>();
Callback<TableView<String>, TableRow<String>> rowFactory = new Callback<TableView<String>, TableRow<String>>() {
@Override
public TableRow<String> call(TableView<String> stringTableView) {
TableRow<String> tableRow = new TableRow<>();
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItems = new MenuItem("put system into unresponsive state");
menuItems.onActionProperty().set(contextMenuAction);
contextMenu.getItems().addAll(menuItems);
tableRow.setContextMenu(contextMenu);
return tableRow;
}
};
Callback<TableColumn.CellDataFeatures<String, String>, ObservableValue<String>> cellValueFactory = new Callback<TableColumn.CellDataFeatures<String, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<String, String> stringStringCellDataFeatures) {
return new SimpleObjectProperty<>(stringStringCellDataFeatures.getValue());
}
};
column.setCellValueFactory(cellValueFactory);
table.setRowFactory(rowFactory);
table.getColumns().add(column);
return table;
}
}