使用 RadioButton 更改 TextField 显示

Change TextField Display with RadioButton

我在响应切换的 RadioButton 时在网格窗格中放置 Label 和 TextField 时遇到问题。

window 将显示相同的选项,除了两个不同的标签和文本字段,这取决于用户 selected 的 RadioButton。(见附件)。

InHouse RB Selected Outsourced RB Selected

我将 RadioButton 对象添加到切换组,然后对 "on actions" 进行编码,以便在选项之一为 [ 时根据需要将 "Machine ID" 或 "Company Name" 字段添加到 GridPane =30=]ed.

我的问题是每个选项我只能select一次,而第二个选项的显示只是与第一个实例重叠,而不是替换它。如果我尝试再次切换回来,我会收到关于将同一对象两次添加到网格的运行时错误(在 Netbeans 中)。

我尝试过的任何可以从显示中删除节点的代码都对菜单的行为没有影响。

    ArrayList<Label> typeSpecLabels = new ArrayList<Label>();
    ArrayList<TextField>typeSpecFields = new ArrayList<TextField>();

    typeSpecLabels.add(machineIDLabel);
    typeSpecLabels.add(companyLabel);

    typeSpecFields.add(machineIDField);
    typeSpecFields.add(companyNameField);

    inHouseBtn.setOnAction(inHouseSpecificEvent ->
    { 
        typeSpecLabels.add(machineIDLabel);

        grid1.add(typeSpecLabels.get(0),0,8,1,1);
        grid1.add(typeSpecFields.get(0), 1,8,1,1);


        if(outSourceBtn.isArmed() == true){
            grid1.getChildren().remove(companyLabel);
            grid1.getChildren().remove(companyNameField);
        }
    });


    outSourceBtn.setOnAction(outSourceSpecificEvent ->
    {
        typeSpecLabels.add(companyLabel);
        grid1.add(companyLabel,0,8,1,1);
        grid1.add(companyNameField,1,8,1,1);

        if(outSourceBtn.isArmed() == true){
            grid1.getChildren().remove(machineIDLabel);
            grid1.getChildren().remove(machineIDField);
        }
    });

我听说我可以尝试使用 2 或 3 个不同的场景(一个用于 RadioButtons 的每个状态),所以我可以尝试一下。但是,如果可以按照我到目前为止的编码方式完成,我更愿意那样做。

我建议从您的网格中删除所有 type 特定标签和字段,然后添加您需要的标签和字段。所以代码将如下所示:

inHouseBtn.setOnAction(inHouseSpecificEvent ->
{ 
    grid1.getChildren().removeAll(machineIDLabel, companyLabel, machineIDField, companyNameField);

    grid1.add(machineIDLabel,0,8,1,1);
    grid1.add(machineIDField, 1,8,1,1);
});


outSourceBtn.setOnAction(outSourceSpecificEvent ->
{
    grid1.getChildren().removeAll(machineIDLabel, companyLabel, machineIDField, companyNameField);

    grid1.add(companyLabel,0,8,1,1);
    grid1.add(companyNameField,1,8,1,1);
});

正如 Pavlo 所建议的那样,此代码最终有效。 虽然我只是删除了特定于反对事件的对象。 该代码没有错误或重叠。

        inHouseBtn.setOnAction(inHouseSpecificEvent ->
    {

        grid1.add(machineIDLabel,0,8,1,1);
        grid1.add(machineIDField,1,8,1,1);

        grid1.getChildren().remove(companyLabel);
        grid1.getChildren().remove(companyNameField);
    });


    outSourceBtn.setOnAction(outSourceSpecificEvent ->
    {

        grid1.add(companyLabel,0,8,1,1);
        grid1.add(companyNameField,1,8,1,1);

        grid1.getChildren().remove(machineIDLabel);
        grid1.getChildren().remove(machineIDField);
    });