So I have this code here, and it is supposed to dynamically add textfields and buttons depending on how many times the user presses New Column
however it is not adding anything.
newColumn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent e){
String column = columns.getText();
columns.clear();
final HBox hbox1 = new HBox();
final TextField textField = new TextField();
textField.setText(column);
Button delete = new Button("X");
vbox.getChildren().add(hbox1);
delete.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent e){
vbox.getChildren().remove(hbox1);
}
});
}
});
This is the part of the code that is supposed to add the new buttons. Here's the rest of the code, that displays the window and everythig else:
package GUI;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Example extends Application{
/**
* @param args
*/
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Scene scene = new Scene(new Group());
primaryStage.setTitle("Parameters");
primaryStage.setWidth(500);
primaryStage.setHeight(800);
showWindow(scene);
primaryStage.setScene(scene);
primaryStage.show();
}
public void showWindow(Scene scene){
final VBox vbox = new VBox();
final HBox hbox = new HBox();
final TextField columns = new TextField();
Button newColumn = new Button("New Column");
Button done = new Button("Done");
hbox.setSpacing(5);
hbox.getChildren().addAll(columns, newColumn);
vbox.setSpacing(5);
vbox.setPadding(new Insets(20, 0, 0, 20));
vbox.getChildren().addAll(hbox);
newColumn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent e){
String column = columns.getText();
columns.clear();
final HBox hbox1 = new HBox();
final TextField textField = new TextField();
textField.setText(column);
Button delete = new Button("X");
vbox.getChildren().add(hbox1);
delete.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent e){
vbox.getChildren().remove(hbox1);
}
});
}
});
vbox.getChildren().addAll(done);
((Group) scene.getRoot()).getChildren().addAll(vbox);
}
}
I'm also using JavaFX, if that helps.
If you want to be dynamic in adding and removing
JComponents
, consider storing them in anArrayList
orVector
. In the start, there will be a defaultJTextField
and then then user will add one after another.In the
actionPerformed()
of theJButton
, create a newJTextField
of whatever size you want. Callinvalidate()
on the content pane of yourJFrame
and then just add whatever component you need.Good to go !
SSCCE
The OP needs JavaFX
1. Get your whatever
Pane
you are using.2. Call the
yourPane.getChildren()
3. In the listener of the button, just add the child to the list you obtained above