Mit der ChoiceBox-Auswahl Textfelder hinzufügen

busgi

Aktives Mitglied
Hi,
ich habe eine Klasse, in der ich eine ChoiceBox mit Integer-Werten habe.
Bei der Auswahl eines Wertes, sollen mir genauso viele TextFelder erzeugt werden.
Ich habe es mit einem Binding versucht, jedoch kam keine richtige Lösung dabei raus. Ist das überhaupt der richtige Lösungsweg?
Oder mache ich es mit einem ChangeListener?
 
Okay, dann schreibe ich hier mal nen Code auf

Code:
public class Beispiel(){

ObservableList<Integer> options = FXCollections.observableArrayList();
ChoiceBox<Integer> choice = new ChoiceBox<>(options);

HBox hbox = new HBox();
TextField text = new TextField();

public void init{
options.addAll(1,2,3,4,5,6,7,8,9,10);


choice.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {

            // if the item of the list is changed
            public void changed(ObservableValue ov, Number value, Number new_value)
            {
                content.getChildren.addAll(options[new_value.intValue()] + new TextField());
            }
        });
}
}


ich habe es jetzt mal so probiert. Will noch nicht so ganz funktionieren.
 
ich reiche Dich mal weiter an @mihe7 s FX-Kompetenz
Du meinst Inkompetenz. Ob ihm/ihr die weiterhilft?

@busgi Du musst schon entsprechend viele Textfelder erstellen, also etwas wie
Java:
int n = options[new_value.intValue()];
TextField[] fields = new TextField[n];
for (int i = 0; i < n; i++) {
    fields[i] = new TextField();
}
content.getChildren().addAll(fields);
schreiben.
 
Du meinst Inkompetenz. Ob ihm/ihr die weiterhilft?

@busgi Du musst schon entsprechend viele Textfelder erstellen, also etwas wie
Java:
int n = options[new_value.intValue()];
TextField[] fields = new TextField[n];
for (int i = 0; i < n; i++) {
    fields[i] = new TextField();
}
content.getChildren().addAll(fields);
schreiben.


bekomme leider bei

int n = options[new_value.intValue()]

ein Fehler angezeigt.

The type of the expression must be an array type but it resolved to ObservableList<Integer>

sonst geht alles andere hmm.

danke für die Antwort btw 🙂
 
Ich mische mich mal ein 😛
Du solltest schon selectedItemProperty() nehmen und nicht selectedIndexProperty()
Hier mal ein kleines Beispiel wie man es machen könnte:
Java:
public class ChoiceBoxExample extends Application {
    @Override
    public void start( Stage primaryStage ) throws Exception {
        HBox root = new HBox();

        VBox content = new VBox();
        content.getChildren().add(new TextField("Textfeld"));
        root.getChildren().add(content);


        ChoiceBox<Integer> choiceBox = new ChoiceBox<>(FXCollections.observableArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
        choiceBox.setValue(1);
        choiceBox.getSelectionModel().selectedItemProperty().addListener((obs, oldValue, newValue) -> {
            int currentValue = content.getChildren().size();
            int delta = currentValue - newValue;

            final Consumer<Integer> consumer = delta > 0 ?
                    i -> content.getChildren().remove(0) :
                    i -> content.getChildren().add(new TextField("Textfeld"));

            IntStream.range(0, Math.abs(delta)).boxed().forEach(consumer);

        });
        root.getChildren().add(choiceBox);


        primaryStage.setTitle("ChoiceBoxExample");
        primaryStage.setScene(new Scene(root, 300, 800));
        primaryStage.show();
    }
}
 

Zurück
Oben