向vbox javafx添加多个节点
我是JavaFx新手,我花了太多时间尝试动态放置单选按钮+文本字段。键入数字后,我希望以这种方式显示单选按钮和文本字段(蓝色和红色) 但我明白了: 我试过使用vbox和hbox,但都不起作用 有人能在我的代码中找出问题吗!!!谢谢你的帮助向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]
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
请救命!我被困在那里:'(事实上它不起作用!我尝试了你的解决方案,但没有从你的屏幕截图中得到什么:非常感谢你的帮助,它现在起作用了,我明白了,你是一个救生员!!