似乎节点(文本字段,复选框等)的值只能通过它们上的事件监听器来访问。我为什么这么说? - 首先,我是JavaFx的新手 - 第二:下面是我正在使用的场景
public class FXMLDocumentController implements Initializable {
@FXML
private JFXCheckBox myCheckBox;
@FXML
private JFXButton myButton;
@Override
public void initialize(URL url, ResourceBundle rb) {
myCheckBox.addEventHandler(MouseEvent.MOUSE_CLICKED, (e)->{
if(myCheckBox.isSelected()){
System.out.Println("Printed from event handler");
});
myButton.addEventHandler(MouseEvent.MOUSE_CLICKED, (e) -> {
myMethod();
});
}
public void myMethod(){
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
for(Node node : root.getChildrenUnmodifiable()){
if(node.getId().equals("myCheckBox"){
JFXCheckBox myChk = (JFXCheckBox) node;
if(myChk.isSelected()){
System.out.Println("Printed from my inner method");
}
System.out.Println(myChk.isSelected());
}
}
}
}
当我选中框时,事件处理程序会如何实现。它打印Printed from event handler
。但是,当点击myButton
时,myMethod
始终会打印false
。
当我使用一个类变量来指示是否选中了复选框并在myMethod
中读取它时,它表示已选中复选框...
发生了什么事?
同样的事情发生在textfields ......