User interface 如何将ControlsFX(对话框)与FXML文件一起使用?
我有以下想法:User interface 如何将ControlsFX(对话框)与FXML文件一起使用?,user-interface,javafx-2,fxml,User Interface,Javafx 2,Fxml,我有以下想法: 我想使用:漂亮的UI,对对话框的良好支持 我想使用FXML作为UI的源代码:场景生成器可以很好地工作,快速创建和更改 现在,我在使用ControlsFX和由FXML文件创建的UI时面临问题。以下是源代码: public class ConfigUI { private Dialog dlg; @FXML TextField urlRepository; protected Action showConfigDialog() throws IOException {
- 我想使用:漂亮的UI,对对话框的良好支持
- 我想使用FXML作为UI的源代码:场景生成器可以很好地工作,快速创建和更改
public class ConfigUI {
private Dialog dlg;
@FXML
TextField urlRepository;
protected Action showConfigDialog() throws IOException {
dlg = new Dialog(null, "Configuration Dialog for Check SVN");
Node content = null;
content = FXMLLoader.load(getClass().getResource("check-dialog.fxml"));
dlg.setResizable(false);
dlg.setIconifiable(false);
dlg.setContent(content);
dlg.getActions().addAll(Dialog.Actions.OK, Dialog.Actions.CANCEL);
return dlg.show();
}
相应的FXML文件检查对话框.FXML
如下所示:
<AnchorPane id="AnchorPane" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="ConfigUI">
<children>
<Label layoutX="29.0" layoutY="26.0" text="URL of Repository" />
<Label layoutX="29.0" layoutY="76.0" text="Revision Interval" />
<TextField fx:id="urlRepository" layoutY="23.0" prefWidth="200.0" AnchorPane.leftAnchor="170.0" AnchorPane.rightAnchor="10.0" />
<Slider fx:id="revIntervalLow" layoutY="77.0" prefWidth="196.0" AnchorPane.leftAnchor="170.0" AnchorPane.rightAnchor="234.0" />
...
</children>
</AnchorPane>
在调试器中,我看到属性urlRepository
从未绑定。我在这里错过了什么?是否需要有一个应用程序类和一个控制器类,应用程序类构建UI,然后绑定控制器
互联网上有没有一个例子可以解释ControlsFXX和FXML文件是如何一起使用的
content = FXMLLoader.load(getClass().getResource("check-dialog.fxml"));
将创建ConfigUI类的新实例,因此当前实例的urlRepository保持未实例化。请改为:
FXMLLoader loader = new FXMLLoader();
loader.setController(this);
content = (Parent) loader.load(getClass().getResourceAsStream("check-dialog.fxml"));
我找到了一个有效的解决方案。以下是对我有效的方法:
showConfigDialog()
移动到调用者Controller
public void configureActionTrigger(ActionEvent actionEvent) {
Dialog dlg = new Dialog(null, "Configuration Dialog for Check SVN");
Action result = this.showConfigDialog(dlg);
...
}
protected Action showConfigDialog(Dialog dlg) throws IOException {
Node content = content = FXMLLoader.load(getClass().getResource("check-dialog.fxml"));
dlg.setResizable(false);
dlg.setIconifiable(false);
dlg.setContent(content);
dlg.getActions().addAll(Dialog.Actions.OK, Dialog.Actions.CANCEL);
return dlg.show();
}
ConfigUI
@FXML
TextField urlRepository;
无需更改检查dialog.fxm
现在,文本字段已正确绑定,当我在文本字段中输入内容时,该字段的值将按预期更改
因此,解决方案是将为配置对话框构建UI的责任转移到另一个类中,让控制器只处理输入。很好,我一回到计算机工作就会尝试。现在我更好地理解了FXML、生成器和控制器的作用。是否有明确的可用资源?当我听从您的建议时,我得到一个异常:
javafx.fxml.LoadException:Controller值已经指定。
。但通过重建整体,我可以为自己解决它。
Controller
public void configureActionTrigger(ActionEvent actionEvent) {
Dialog dlg = new Dialog(null, "Configuration Dialog for Check SVN");
Action result = this.showConfigDialog(dlg);
...
}
protected Action showConfigDialog(Dialog dlg) throws IOException {
Node content = content = FXMLLoader.load(getClass().getResource("check-dialog.fxml"));
dlg.setResizable(false);
dlg.setIconifiable(false);
dlg.setContent(content);
dlg.getActions().addAll(Dialog.Actions.OK, Dialog.Actions.CANCEL);
return dlg.show();
}
ConfigUI
@FXML
TextField urlRepository;