我有两个控制器。一个控制器管理大多数主要功能,另一个控制从主控制器访问的简单弹出提示。
这是存储在主控制器中的功能,用于访问提示。
public void deletePrompt(){
DeletePromptController controller = new DeletePromptController();
boolean result = controller.showPrompt("/MainWindow//DeletePrompt.fxml");
if(result){
System.out.println("Deleted");
}else{
System.out.println("Canceled");
}
}
这是提示控制器
public class DeletePromptController extends ShowWindow {
public Label question;
public Button delete, cancel;
private boolean result = true;
boolean showPrompt(String path){
showWindow(path);
return result;
}
public void delete(){
System.out.println("D");
result = true;
Stage stage = (Stage) delete.getScene().getWindow();
stage.close();
}
public void cancel(){
System.out.println("C");
result = false;
Stage stage = (Stage) cancel.getScene().getWindow();
stage.close();
}
}
这是用于加载和显示删除提示fxml文件的块。
public class ShowWindow {
public void showWindow(String path){
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(path));
Parent root = fxmlLoader.load();
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
stage.setScene(new Scene(root));
stage.showAndWait();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
除了一件事,一切都在工作。从提示控制器获取结果时,主控制器未获取正确的布尔结果。
按下删除时的输出:
D
Canceled
按下取消时的输出:
C
Canceled
D之后应是Deleted。
任何帮助。
FXMLLoader
创建一个新的控制器实例,因为该fx:controller
属性在fxml中提供。
您基本上有2个选择:
fx:controller
从fxml中删除该属性,然后自己指定控制器:
public void showWindow(String path){
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(path));
fxmlLoader.setController(this);
Parent root = fxmlLoader.load();
或者
获取由创建的控制器 FXMLLoader
public static <T> T showWindow(String path){
try {
FXMLLoader fxmlLoader = new FXMLLoader(ShowWindow.class.getResource(path));
Parent root = fxmlLoader.load();
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
stage.setScene(new Scene(root));
stage.showAndWait();
return fxmlLoader.getController();
}catch(IOException ex){
ex.printStackTrace();
}
return null;
}
boolean showPrompt(String path) {
return ShowWindow.<DeletePromptController>showWindow(path).result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句