2017-11-29 4 views
-1

Ich habe ein Problem Ich kann keinen Rückgabewert erhalten, weil ich es im Controller verwenden möchte. Wie kann ich nach dem Schließen des Fensters einen Rückgabewert von der Checkbox erhalten? Weil ich einen Rückgabewert im Controller benötige.javafx Wie bekomme ich den Rückgabewert vom Meldungsfeld

Dank
import javafx.event.EventHandler; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.VBox; 
import javafx.stage.Modality; 
import javafx.stage.Stage; 

public class CheckBox { 

    public static String display(String title, String message){ 
     Stage window = new Stage(); 
     String id = " "; 

     window.initModality(Modality.APPLICATION_MODAL); 
     window.setTitle(title); 
     window.setMinWidth(250); 

     Label label = new Label(); 
     label.setText(message); 

     Button yButton = new Button("Y"); 
     Button nbButton = new Button("N"); 
     yButton.setId("Y"); 
     nbButton.setId("N"); 
     yButton.setOnAction(e -> window.close()); 
     nbButton.setOnAction(e -> window.close()); 

     VBox layout = new VBox(10); 
     layout.getChildren().addAll(label,yButton, nbButton); 
     layout.setAlignment(Pos.CENTER); 
     Scene scene = new Scene(layout); 
     window.setScene(scene); 
     window.showAndWait(); 

     if(yButton.isPressed()) 
      return yButton.getId(); 

     else if(nbButton.isPressed()) 
      return nbButton.getId(); 

     return null; 
    } 
} 
+0

Was genau möchten Sie von diesem Dialog zurückbekommen? –

+0

Wenn Benutzer auf Ybutton klicken, möchte ich Y zurückgeben, die ID ist und eine Zeichenfolge "Y" in Controller erhalten @mrmcwolf – JhihweiLi

Antwort

1

Zunächst möchte ich Ihnen nicht raten, Namen zu verwenden, die aus Standardbibliotheken entsprechen. Der Name CheckBox ist unpassend, weil er Kontrolle über diesen Namen hat. Verwenden Sie etwas beschreibendes, wie CheckBoxDialog.

Verwenden Sie keinen statischen Kontext. In diesem Fall ist dies unnötig und zeigt einen schlechten Stil.

Dies ist eine Beispielimplementierung, bei der die statische Methode beibehalten wird.

public class CheckBoxDialog { 
    public static final String YES = "Y"; 
    public static final String NO = "N"; 

    private String exitCode = NO; 

    private Stage window; 
    private Label label; 

    public CheckBoxDialog() { 
     createGUI(); 
    } 

    private void createGUI() { 
     window = new Stage(); 
     window.initModality(Modality.APPLICATION_MODAL); 
     window.setMinWidth(250); 

     label = new Label(); 

     Button yButton = new Button("Y"); 
     Button nbButton = new Button("N"); 

     yButton.setOnAction(e -> { 
      exitCode = YES; 
      window.close(); 
     }); 

     nbButton.setOnAction(e -> { 
      exitCode = NO; 
      window.close(); 
     }); 

     VBox layout = new VBox(10); 
     layout.getChildren().addAll(label,yButton, nbButton); 
     layout.setAlignment(Pos.CENTER); 

     Scene scene = new Scene(layout); 
     window.setScene(scene); 
    } 

    public void setTitle(String title) { 
     window.setTitle(title); 
    } 

    public void setMessage(String message) { 
     label.setText(message); 
    } 

    public String showAndWait() { 
     window.showAndWait(); 
     return exitCode; 
    } 

    public static String display(String title, String message){ 
     CheckBoxDialog dlg = new CheckBoxDialog(); 
     dlg.setTitle(title); 
     dlg.setMessage(message); 

     return dlg.showAndWait(); 
    } 
} 
+0

Danke. Es klappt. – JhihweiLi

Verwandte Themen