2017-06-24 53 views
0

我是新來的JavaFx,我試圖創建一個簡單的確認框,確定用戶是否真的要退出或沒有類。它有一個函數返回一個布爾值,表示如果用戶點擊「是」或「否」:按鈕不改變本地原始變量與JavaFx

public class ConfirmBoxController implements IView { 

    public javafx.scene.control.Button yes_BTN; 
    public javafx.scene.control.Button no_BTN; 

    private volatile boolean answer; 

    // Constructors..// 

    public boolean confirm(){ 
     try{ 
      stage = new Stage(); 
      FXMLLoader fxmlLoader = new FXMLLoader(); 
      Parent root = fxmlLoader.load(getClass().getResource("ConfirmBox.fxml").openStream()); 
      Scene scene = new Scene(root, 250, 140); 
      stage.setScene(scene); 
      stage.showAndWait(); 

      return answer; 
     } 
     catch(Exception E){ 
      E.printStackTrace(); 
      return true; 
     } 
    } 

    public void yes() { 
     this.answer = true; 
     Stage stage = (Stage) yes_BTN.getScene().getWindow(); 
     stage.close(); 
    } 

    public void no() { 
     this.answer = false; 
     Stage stage = (Stage) no_BTN.getScene().getWindow(); 
     stage.close(); 
    } 
} 

我試圖使「答案」揮發,而不是,但它並沒有改變任何東西。

+0

1)除非你需要同步,你可以省略「volatile」。 2)從您發佈的代碼中,不清楚是否在按鈕上附加了單擊事件處理程序。這是否是這種情況(例如,稱爲「是」和「否」的方法)? – Patrick

+0

'FXMLLoader'創建控制器的另一個實例。 https://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml – fabian

+0

但_FXMLoader_知道哪個類創建一個實例?由於XML文件中_AnchorPane_標記中的_fx:controller_屬性?但AFAIK這個屬性不一定需要存在。 – Patrick

回答

0

你可以用JavaFX構建DialogAlert這裏這個功能是一個教程如何使用它們:http://code.makery.ch/blog/javafx-dialogs-official/

這就是你可能需要:

Alert alert = new Alert(AlertType.CONFIRMATION); 
alert.setTitle("Confirmation Dialog"); 
alert.setHeaderText("Look, a Confirmation Dialog"); 
alert.setContentText("Are you ok with this?"); 

Optional<ButtonType> result = alert.showAndWait(); 
if (result.get() == ButtonType.OK){ 
    // ... user chose OK 
} else { 
    // ... user chose CANCEL or closed the dialog 
} 

或者,如果你想有一個是/否警報,然後兩個ButtonType s

Alert yesNoAlert = new Alert(Alert.AlertType.CONFIRMATION); 
yesNoAlert.setTitle("Title"); 
yesNoAlert.setContentText("Content"); 
yesNoAlert.setHeaderText("Header"); 


ButtonType buttonYes = new ButtonType("Yes", ButtonBar.ButtonData.YES); 
ButtonType buttonNo = new ButtonType("No" , ButtonBar.ButtonData.NO); 

yesNoAlert.getButtonTypes().setAll(buttonYes,buttonNo); 

Optional<ButtonType> result = yesNoAlert.showAndWait(); 
if (result.get() == buttonYes){ 
    // ... 
} else { 
    // ... 
} 
+0

雖然這可能在理論上回答這個問題,[這將是更可取的](/ meta.stackoverflow.com/q/8259)在這裏包括答案的基本部分,並提供鏈接供參考。 –