按fx:id的java引用控件
我放置数字的部分是一个标签,而当前显示“无”的部分是一个按钮。我想在选择按钮时引用标签中的值,以便显示用户当天的约会
是否有方法通过FX:ID字符串名称引用控件,以便执行此操作?标签名为lbldayofweekxx,按钮名为btnappointxx,其中xx是01到42之间的值
这就是我尝试更改值的原因。这只是一个测试,我试图将第一个按钮的值设置为“完成”
@FXML
void handleDayChosen(ActionEvent event) {
try {
// FXMLLoader loader = new FXMLLoader();
// loader.setLocation(getClass().getResource("/Views/FormMain.fxml"));
// Parent myView = loader.load();
// Scene myScene = new Scene(myView);
// Label lbl = (Label) myScene.lookup("#lblDateOfMonth01");
// Label myLblField = (Label)myView.FindControl("txtField" + 1);
// lbl.setText("DONE");
FXMLLoader loader = new FXMLLoader(getClass().getResource("/Views/FormMain.fxml"));
Parent root = loader.load();
Button foo = (Button)loader.getNamespace().get("lblAppointments01");
foo.setText("DONE");
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
我是Java新手,所以我不知道我做错了什么
提前感谢,
账单
这就是我最后想到的。我知道它不漂亮,但它很管用
GridPane gpCal = this.gpCalendar;
for (int i = 1 ; i <= 7; i++) {
int row = i * 2;
for (int col = 1; col <= 7; col++) {
int pos = ((i-1)*7)+col;
lblDay[pos] = new Label();
lblDay[pos].setText("");
lblDay[pos].setPrefSize(100, 20);
lblDay[pos].setText(String.valueOf(col) + ", " + String.valueOf(row));
gpCal.add(lblDay[pos], col, row);
}
row++;
for (int col = 0; col <= 6; col++) {
int pos = ((i-1)*7)+col;
btnAppts[pos] = new Button();
btnAppts[pos].setText("");
btnAppts[pos].setPrefSize(100, 100);
btnAppts[pos].setText(String.valueOf(col) + ", " + String.valueOf(row));
gpCal.add(btnAppts[pos], col, row);
}
}
现在,我们来看看如何将按钮和标签的格式设置为与下面的匹配
谢谢你的帮助
账单
# 1 楼答案
像这样的UI根本不适合FXML。使用Java创建这样的UI通常要简单得多,代码也少得多。这样,您可以在循环中创建按钮和标签,并为每个按钮和标签添加不同的事件处理程序:
显然,如果需要,您仍然可以对周围的UI使用FXML,只需将上面的循环放在控制器的
initialize()
方法中即可。但这显然比控制器中的100多行FXML加上60个不同变量更好地实现同样的效果