2015-09-04 2 views
3

У меня есть программа с панелью меню, в которой есть кнопка «О себе», чтобы отобразить некоторую информацию об этом приложении.тип предупреждения нет закрытие javafx

Дело в том, что когда я использую AlertType.INFORMATION, я могу нажать кнопку Ok, чтобы закрыть предупреждение, но когда я использую NONE, когда я нажимаю кнопку закрытия окна, ничего не происходит. Я уже пытался установить setOnCloseAction (e-> close()); но он тоже не закрывается.

Спасибо!

public class RootLayoutController { 

private MainApp main; 

@FXML 
private MenuItem loadFiles; 

@FXML 
private MenuItem about; 

@FXML 
private void displayAbout() { 
    Alert alert = new Alert(AlertType.NONE); 
    alert.initStyle(StageStyle.UTILITY); 
    alert.initOwner(main.getPrimaryStage()); 
    alert.setTitle("Organiz3r"); 
    alert.setHeaderText("Organiz3r v1.0"); 
    alert.setContentText("Developed at BitBucket"); 
    alert.showAndWait(); 
} 

@FXML 
private void handleLoad() { 
    FileChooser fileChooser = new FileChooser(); 
    fileChooser.setTitle("Open Files"); 
    List<File> files = fileChooser.showOpenMultipleDialog(main.getPrimaryStage()); 
    main.loadFiles(files); 
} 

public RootLayoutController() { 
    // TODO Auto-generated constructor stub 
} 

public void setMain(MainApp main) { 
    this.main = main; 
} 

Главная выставиться в главном классе с

// Load root layout from fxml file. 
     FXMLLoader loader = new FXMLLoader(); 
     loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml")); 
     rootLayout = (BorderPane) loader.load(); 

     RootLayoutController controller = loader.getController(); 
     controller.setMain(this); 
+0

Включите SSCCE, пожалуйста! – Amber

+1

Не сожалею, плохой тег @CatalinaIsland – jisuskraist

+0

Я отредактировал основное сообщение @Amber – jisuskraist

ответ

8

documentation объясняет (в разделе «Диалог Заключительное правила»), что при нажатии на кнопку закрытия окна не будет иметь никакого эффекта, если не будет либо ровно один или есть две или более кнопки, одна из которых по существу является кнопкой «Отмена». Таким образом, когда вы создаете Alert с AlertType.NONE, у него нет кнопок, поэтому закрытие его стандартной кнопкой «закрыть окно» будет проигнорировано.

Так что, если вы не хотите AlertType.INFORMATION, вам нужно добавить кнопку на оповещения, которые вы можете сделать с

alert.getDialogPane().getButtonTypes().add(ButtonType.OK); 
4

На основе Dialog documentation кажется, что вы должны иметь по крайней мере одну кнопку в диалоговом окне/Alert, чтобы закрыть его с помощью кнопки «x» в углу. Согласно документам, закрытие с помощью кнопки «x» считается закрывающей «ненормально». Вот что он говорит:

JavaFX диалоги могут быть закрыты только «ненормально» (как определено выше) в двух ситуациях:

Когда диалог имеет только одну кнопку, или

Когда диалог имеет несколько кнопок, если один из них соответствует одному из следующих требований:

Кнопка имеет тип ButtonType, ButtonBar.ButtonData которого имеет тип ButtonBar.ButtonData.CANCEL_CLOSE.

Кнопка имеет ButtonType, ButtonBar.ButtonData возвращает true, когда вызывается ButtonBar.ButtonData.isCancelButton(). Во всех других ситуациях диалоговое окно откажется отвечать на все закрытые запросы ...

+1

Это тоже правильный ответ, но Джеймс включил исправление, чтобы использовать AlertType.NONE и добавить простую кнопку для удовлетворения требований. – jisuskraist

Смежные вопросы