我有一个关于Javafx控制器的问题。可以说,我有多个在主应用程序中绑定在一起的fxml文件。然后,每个fxml文件都有单独的控制器。让我们看一下下面的结构
com.par.app
- MainApp.java -> This is the main Application
- FirstController.java
- SecondController.java
com.par.app.view
- First.fxml
- Second.fxml
com.par.app.model
- MyModel -> This has some getter and setter methods.
现在按照上述结构,我在First.fxml中有一个复选框,在Second.fxml中有一个标签。
我的问题:如何通过选中和取消选中First.FXML中的复选框来设置Second.FXML中的标签文本,我已经尝试过这样:
// In FirstController.Java
1) Initialize the SecondController
2) Get checkbox from FXMl as , priate CheckBox box1;
3) On initialize(....) method, I have set the event handler, as box1.setOnAction(enableHandle)
4) Finally the event Handler as,
EventHandler<ActionEvent> enableHandle = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if (box1.isSelected()) {
secondController.setLabelText("PoP");
} else {
secondController.setText("Gone Wrong");
}
}
};
Similarly, On my second controller I have declared FXML control as,
@FXML
private Label lblTes;
// the method
public void setLabelText(String a)
{
this.lblTes.settest(a);
}
->以上将无法正常工作,因为它返回未知来源。
我尝试的下一种方法是使用MyModel,并使用getter和setter方法,但未成功。
对不起,我的问题很长。我尝试过但没有成功。我该怎么做才能解决这个问题?
提前致谢。
// my model looks like
public class MyModel {
private String btnname;
public String getBtnname() {
return btnname;
}
public void setBtnname(String btnname) {
this.btnname = btnname;
}
}
当您选中复选框时,则在FirstView的控制器中(在其中实现复选框的事件处理程序),更改模型中的标签文本。您的模型应绑定到视图,因此SecondView中的标签文本应更新。
如果未将模型绑定到视图,则可以使用观察者模式。
1.更改模型并扩展java.util.Observable
public class MyModel extends Observable {
private String btnname;
public String getBtnname() {
return btnname;
}
public void setBtnname(String btnname) {
this.btnname = btnname;
pingObservers()
}
private void pingObservers() {
setChanged();
notifyObservers();
}
}
将SecondController注册为模型的观察者。当您将模型设置为控制器时,添加类似于以下内容的行:model.addObserver(this);
SecondController必须实现java.util.Observer.update(...)
void update(Observable o,Object o1){//使用模型值设置标签文本}
在FirstController中的事件处理程序中,当您在模型上调用setBtnname()方法时,将调用SecondController中的update()方法。在那里,您可以添加代码来更改标签文本。由于标签位于由SecondController控制的视图中,因此您只需要在带有@FXML批注的控制器中注入标签的引用即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句