向vbox javafx添加多个节点

向vbox javafx添加多个节点,javafx,radio-button,uitextfield,vbox,hbox,Javafx,Radio Button,Uitextfield,Vbox,Hbox,我是JavaFx新手,我花了太多时间尝试动态放置单选按钮+文本字段。键入数字后,我希望以这种方式显示单选按钮和文本字段(蓝色和红色) 但我明白了: 我试过使用vbox和hbox,但都不起作用 有人能在我的代码中找出问题吗!!!谢谢你的帮助 RadioButton[] btn = new RadioButton[100]; //our Collection to hold newly created Buttons TextField[] xlist = new TextField[100]

我是JavaFx新手,我花了太多时间尝试动态放置单选按钮+文本字段。键入数字后,我希望以这种方式显示单选按钮和文本字段(蓝色和红色)

但我明白了:

我试过使用vbox和hbox,但都不起作用

有人能在我的代码中找出问题吗!!!谢谢你的帮助

 RadioButton[] btn = new RadioButton[100]; //our Collection to hold newly created Buttons
TextField[] xlist = new TextField[100]; //our Collection to hold newly created Buttons
TextField[] ylist = new TextField[100];

final ToggleGroup grpBtn = new ToggleGroup();
@FXML
private Group noeuds;
@FXML
private VBox vb2;
@FXML
private HBox hb2;



@FXML
public void addBtn(int i, RadioButton[] btn) {
    btn[i] = new RadioButton();
    btn[i].setText(String.valueOf(i + 1));
    btn[i].setToggleGroup(grpBtn);
    btn[i].setSelected(true);
    btn[i].setTranslateX(-5);
    btn[i].setTranslateY(-340);
    btn[i].setPadding(new Insets(0, 0, 20, 20));
    vb2.getChildren().add(btn[i]);


}

@FXML
public void addX(int i, TextField[] xlist) {
    xlist[i] = new TextField();
    xlist[i].setTranslateX(-80);
    xlist[i].setTranslateY(40);
    xlist[i].setStyle("-fx-background-color: red;");
    xlist[i].setPrefSize(30, 30);
    xlist[i].setTooltip(new Tooltip("X coordinate of " + (i + 1)));
    hb2.getChildren().add(xlist[i]);

}

@FXML
public void addY(int i, TextField[] ylist) {
    ylist[i] = new TextField();
    ylist[i].setTranslateX(-78);
    ylist[i].setTranslateY(40);

    ylist[i].setStyle("-fx-background-color: blue;");
    ylist[i].setPrefSize(30, 30);

    ylist[i].setTooltip(new Tooltip("Y coordinate of" + (i + 1)));
    hb2.getChildren().add(ylist[i]);



}

public void initialize(URL url, ResourceBundle rb) {

    //some code

    for (int i = 0; i < Integer.parseInt(nodeID.getText()); i++) {
        addBtn(i, btn);
        // System.out.println("jjjj"+btn.length);
        addX(i, xlist);
        // System.out.println("mmmm"+xlist.length);
        addY(i, ylist);


    }
}
RadioButton[]btn=新的RadioButton[100]//我们的收藏将保存新创建的按钮
TextField[]xlist=新建TextField[100]//我们的收藏将保存新创建的按钮
TextField[]ylist=新建TextField[100];
最终切换组grpBtn=新切换组();
@FXML
私人团体非公开声明;
@FXML
专用vboxvb2;
@FXML
私人HBox hb2;
@FXML
公共无效添加btn(int i,单选按钮[]btn){
btn[i]=新单选按钮();
btn[i].setText(String.valueOf(i+1));
btn[i].setToggleGroup(grpBtn);
btn[i].setSelected(真);
btn[i].setTranslateX(-5);
btn[i].setTranslateY(-340);
btn[i].设置填充(新插入(0,0,20,20));
vb2.getChildren().add(btn[i]);
}
@FXML
public void addX(int i,TextField[]xlist){
xlist[i]=新文本字段();
xlist[i].setTranslateX(-80);
xlist[i].setTranslateY(40);
xlist[i].setStyle(“-fx背景色:红色;”);
xlist[i].setPrefSize(30,30);
xlist[i].setTooltip(新工具提示(“X坐标的“+(i+1)));
hb2.getChildren().add(xlist[i]);
}
@FXML
public void addY(int i,TextField[]ylist){
ylist[i]=新文本字段();
ylist[i].setTranslateX(-78);
叶利斯特[i].setTranslateY(40);
ylist[i].setStyle(“-fx背景色:蓝色;”);
ylist[i].setPrefSize(30,30);
ylist[i].setTooltip(新工具提示(“Y坐标的“+(i+1)));
hb2.getChildren().add(ylist[i]);
}
公共void初始化(URL、ResourceBundle rb){
//一些代码
对于(int i=0;i
这个小应用可能会帮你提升。把代码通读一遍,试着理解。我试图在代码中添加注释

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication7 extends Application {

    @Override
    public void start(Stage primaryStage) {        
        AnchorPane root = new AnchorPane();

        VBox vbox1 = new VBox();
        vbox1.setSpacing(5);//Set vbox spacing

        //Handles the number of row to be added to the vbox
        for(int i = 0; i < 4; i++)
        {
            vbox1.getChildren().add(addNewRow(i));
        }

        root.getChildren().add(vbox1);
        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    //Method creates all the nodes for a new row.
    HBox addNewRow(int rowNumber)
    {
        //Create nodes and adding correct spaceing
        HBox hbox = new HBox();
        hbox.setSpacing(5);
        RadioButton radioButton = new RadioButton();
        radioButton.setPrefHeight(25);
        TextField textField = new TextField();
        textField.setPrefWidth(40);
        Label label = new Label(Integer.toString(rowNumber + 1));
        label.setPrefHeight(25);
        HBox trailingHBox = new HBox();
        trailingHBox.setSpacing(5);
        hbox.getChildren().addAll(radioButton, textField, label, trailingHBox);

        //Event handler on textfield. Add right about of trailing textfields
        textField.setOnKeyReleased((event)->{            
            if(textField.getText().trim().length() > 0 && Integer.parseInt(textField.getText()) > 0)//If textfield has some value greater than zero. I didn't catch for non integers
            {
                int tempInt = Integer.parseInt(textField.getText());
                //clear trailingHBox so that new Trailing hbox can be added
                if(trailingHBox.getChildren().size() > 0)
                {
                    trailingHBox.getChildren().clear();
                }
                //add the correct number of textFields.
                for(int i = 0; i < tempInt - 1; i++)
                {
                    TextField tempTextField = new TextField();
                    tempTextField.setPrefWidth(20);
                    trailingHBox.getChildren().add(tempTextField);
                }

                //add the blue and red textfields
                TextField textFieldBlue = new TextField();
                textFieldBlue.setPrefWidth(40);
                textFieldBlue.setStyle("-fx-background-color: BLUE");
                TextField textFieldRed = new TextField();
                textFieldRed.setPrefWidth(40);
                textFieldRed.setStyle("-fx-background-color: RED");

                trailingHBox.getChildren().addAll(textFieldBlue, textFieldRed);                
            }
            else{
               trailingHBox.getChildren().clear();//clear traingHbox if it's has no value
            }
        });       

        return hbox;
    }
}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.control.RadioButton;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.ancorpane;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
/**
*
*@author blj0011
*/
公共类JavaFXApplication7扩展了应用程序{
@凌驾
公共无效开始(阶段初始阶段){
锚烷根=新锚烷();
VBox vbox1=新的VBox();
vbox1.setspace(5);//设置vbox间距
//处理要添加到vbox的行数
对于(int i=0;i<4;i++)
{
vbox1.getChildren().add(addNewRow(i));
}
root.getChildren().add(vbox1);
场景=新场景(根,300,250);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}
//方法为新行创建所有节点。
HBox addNewRow(整数行数)
{
//创建节点并添加正确的空格
HBox HBox=新的HBox();
hbox.setspace(5);
RadioButton RadioButton=新RadioButton();
radioButton.setPrefHeight(25);
TextField TextField=新的TextField();
textField.setPrefWidth(40);
Label Label=新标签(Integer.toString(rowNumber+1));
标签高度(25);
HBox trailingHBox=新的HBox();
牵引箱设置间隔(5);
hbox.getChildren().addAll(单选按钮、文本字段、标签、trailingHBox);
//textfield上的事件处理程序。添加关于尾随textfield的右侧
textField.setOnKeyReleased((事件)->{
if(textField.getText().trim().length()>0&&Integer.parseInt(textField.getText())>0)//如果textField的某个值大于零。我没有捕捉到非整数
{
int tempInt=Integer.parseInt(textField.getText());
//清除跟踪hbox,以便可以添加新的跟踪hbox
如果(trailingHBox.getChildren().size()>0)
{
trailingHBox.getChildren().clear();
}
//添加正确数量的文本字段。
for(int i=0;i


请救命!我被困在那里:'(事实上它不起作用!我尝试了你的解决方案,但没有从你的屏幕截图中得到什么:非常感谢你的帮助,它现在起作用了,我明白了,你是一个救生员!!