Java 按fx:id的引用控件

Java 按fx:id的引用控件,java,javafx,controls,scenebuilder,Java,Javafx,Controls,Scenebuilder,我有一个使用JavaFX和场景生成器为课堂设计的日历屏幕。 我放置数字的部分是一个标签,而当前显示“无”的部分是一个按钮。我想在选择按钮时引用标签中的值,以便显示用户当天的约会 是否有方法通过FX:ID字符串名称引用控件,以便执行此操作?标签名为lbldayofweekxx,按钮名为btnappointxx,其中xx是01到42之间的值 这就是我尝试更改值的原因。这只是一个测试,我试图将第一个按钮的值设置为“完成” 我是Java新手,所以我不知道我做错了什么 提前感谢, 账单 这就是我最后想

我有一个使用JavaFX和场景生成器为课堂设计的日历屏幕。

我放置数字的部分是一个标签,而当前显示“无”的部分是一个按钮。我想在选择按钮时引用标签中的值,以便显示用户当天的约会

是否有方法通过FX:ID字符串名称引用控件,以便执行此操作?标签名为lbldayofweekxx,按钮名为btnappointxx,其中xx是01到42之间的值

这就是我尝试更改值的原因。这只是一个测试,我试图将第一个按钮的值设置为“完成”

我是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);
            }

        } 
GridPane gpCal=this.gpCalendar;

对于(int i=1;i这样的UI,它根本不适合FXML。使用Java创建这样的UI通常更容易,代码更少。这样,您可以在循环中创建按钮和标签,并为每个按钮和标签添加不同的事件处理程序:

int numDays = 30 ; // in real life this comes from the month and year
GridPane calendarPane = ...; // can be a @FXML-injected variable if needed

for (int i = 1 ; i <= numDays ; i++) {
    Label dayLabel = new Label(Integer.toString(i));
    Button button = new Button("None");
    // set styles, etc
    int day = i ;
    button.setOnAction(e -> processButtonPress(button, dayLabel, day));
    VBox vbox = new VBox(dayLabel, button);
    int row = getRowForDay(i);
    int col = getColumnForDay(i);
    calendarPane.add(vbox, col, row);
}

// ...

private void handleDayChosen(Button button, Label label, int dayOfMonth) {
    // whatever you need here...
    label.setTextFill(Color.GREEN);
    button.setText("Done");
}
int numDays=30;//在现实生活中,这来自月份和年份
GridPane calendarPane=…;//如果需要,可以是@FXML注入变量
对于(int i=1;i processButtonPress(按钮,日期标签,日期));
VBox VBox=新的VBox(日期标签,按钮);
int row=getRowForDay(i);
int col=getColumnForDay(i);
calendarPane.add(vbox、col、row);
}
// ...
已选择私人作废处理日期(按钮按钮、标签标签、int dayOfMonth){
//不管你需要什么。。。
标签.setTextFill(颜色.绿色);
按钮.setText(“完成”);
}

显然,如果需要,您仍然可以对周围的UI使用FXML,只需将上面的循环放在控制器的
initialize()中
方法。但这显然比100多行FXML加上控制器中的60个不同变量来实现同样的效果要好。

像这样的UI根本不适合FXML。使用Java创建像这样的UI通常要容易得多,代码也要少得多。这样,您可以在循环中创建按钮和标签,一个d为每个事件添加不同的事件处理程序:

int numDays = 30 ; // in real life this comes from the month and year
GridPane calendarPane = ...; // can be a @FXML-injected variable if needed

for (int i = 1 ; i <= numDays ; i++) {
    Label dayLabel = new Label(Integer.toString(i));
    Button button = new Button("None");
    // set styles, etc
    int day = i ;
    button.setOnAction(e -> processButtonPress(button, dayLabel, day));
    VBox vbox = new VBox(dayLabel, button);
    int row = getRowForDay(i);
    int col = getColumnForDay(i);
    calendarPane.add(vbox, col, row);
}

// ...

private void handleDayChosen(Button button, Label label, int dayOfMonth) {
    // whatever you need here...
    label.setTextFill(Color.GREEN);
    button.setText("Done");
}
int numDays=30;//在现实生活中,这来自月份和年份
GridPane calendarPane=…;//如果需要,可以是@FXML注入变量
对于(int i=1;i processButtonPress(按钮,日期标签,日期));
VBox VBox=新的VBox(日期标签,按钮);
int row=getRowForDay(i);
int col=getColumnForDay(i);
calendarPane.add(vbox、col、row);
}
// ...
已选择私人作废处理日期(按钮按钮、标签标签、int dayOfMonth){
//不管你需要什么。。。
标签.setTextFill(颜色.绿色);
按钮.setText(“完成”);
}

显然,如果需要,您仍然可以对周围的UI使用FXML,只需将上面的循环放在控制器的
initialize()中
方法。但这显然比控制器中的100多行FXML加上60个不同变量更好,以实现相同的效果。

您可以创建一个包含按钮和标签的DayNode。这可能对您的项目来说太多了。您可以创建一个映射,将
标签
映射到它的
按钮
。您正在创建在FXML中创建所有这些标签和按钮?在Java中创建它们似乎是一个更好的选择(那么您的问题的解决方案就很简单了)。谢谢塞德里克。我会看一看。詹姆斯。如果没有FXML,我怎么才能创建按钮?我不知道它有什么帮助。我会开始用谷歌搜索看看。你可以创建一个包含按钮和标签的DayNode。这可能对你的项目来说太多了。你可以有一个映射将
标签映射到
按钮的地图。你是在FXML中创建所有这些标签和按钮?在Java中创建它们似乎是一个更好的选择(那么您的问题的解决方案就很简单了)。谢谢塞德里克。我会看一看。詹姆斯。如果没有FXML,我该如何创建按钮?我不知道它有什么帮助。我会开始谷歌搜索看看。我可能已经破坏了你提供给我的东西,但它让我走上了正确的轨道。谢谢你詹姆斯的帮助。我可能已经破坏了你提供给我的东西,但它让我走上了正确的道路谢谢你,詹姆斯,谢谢你的帮助。