Ich verwende JavaFX und möchte, dass beim Klicken auf eine Schaltfläche ein neues Optionsfeld erstellt und in einem Ablauffenster angezeigt wird. Ist das möglich? Ich habe versucht, dies zu tun, aber nichts scheint zu erscheinen.Erstellen neuer Optionsfeldoptionen während der Laufzeit
Edit: Das Problem scheint von der insertDemand() -Methode in der Controller-Klasse zu stammen. Die Optionsschaltflächen erscheinen, wenn ich die ersten beiden Zeilen der Methode entferne. Ich habe keine Ahnung, warum das so ist. Aber ich brauche, wenn der Knopf angeklickt wird eine Linie auf dem Bildschirm erscheinen sowie die Radio-Taste zu erscheinen, so dass das Entfernen dieser beiden Linien ist keine praktikable Lösung. Hier
ist die fxml:
<GridPane alignment="center" hgap="10" prefHeight="800.0" prefWidth="1200.0" stylesheets="/sample/sample.css" vgap="10" xmlns="http://javafx.com/javafx/8.0.76-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<!--Insert-->
<ScrollPane GridPane.columnIndex="0" GridPane.rowIndex="1" GridPane.rowSpan="4">
<content>
<FlowPane>
<Button fx:id="demandB" mnemonicParsing="false" onAction="#insertDemand" text="Demand" />
</FlowPane>
</content>
</ScrollPane>
<StackPane fx:id="workspaceSP" GridPane.columnIndex="1" GridPane.rowIndex="0" GridPane.rowSpan="2">
</StackPane>
<ScrollPane GridPane.columnIndex="1" GridPane.rowIndex="3">
<content>
<FlowPane fx:id="lineButtonsFP" prefHeight="100.0">
<Label text="Select a Curve:" />
</FlowPane>
</content>
</ScrollPane>
</children>
<columnConstraints>
<ColumnConstraints maxWidth="600.0" minWidth="392.0" prefWidth="400.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="200.0" minHeight="22.0" prefHeight="39.0" />
<RowConstraints />
</rowConstraints>
</GridPane>
Hier ist der Controller-Klasse:
public class Controller {
static Parent graphMaker;
@FXML
StackPane workspaceSP;
@FXML
FlowPane lineButtonsFP;
static LinkedList<Demand> curvesLL;
ToggleGroup group = new ToggleGroup();
public void insertDemand() {
Demand demand = new Demand(workspaceSP,200,200,400,400);
curvesLL.add(demand);
RadioButton radioButton = new RadioButton("Demand");
radioButton.setToggleGroup(group);
radioButton.setSelected(true);
lineButtonsFP.getChildren().add(radioButton);
}
}
Demand ist eine Klasse ich gemacht habe. Wenn erstellt wird eine Zeile angezeigt:
public class Demand {
public Demand(Pane pane, double startX, double startY, double endX, double endY){
pane.getChildren().add(makeLine(startX, startY, endX, endY));
}
private Line makeLine(double startX, double startY, double endX, double endY) {
Line line = new Line(startX, startY, endX, endY);
return line;
}
}
}
Vielen Dank für Ihre Hilfe :)
Edit 2: Ich fand, wie es funktioniert. Keine Ahnung, warum das das Problem behebt, aber wenn Sie die ersten beiden Zeilen der insertDemand() -Methode nach unten verschieben, so dass das Optionsfeld zuerst erstellt wird und dann das Deman-Objekt erstellt wird, funktioniert es.
Ich bin kein Experte hier, aber ich nehme an, Sie müssen die Java-API verwenden, um neue Optionsfelder zur Laufzeit hinzuzufügen. – Thomas
Funktioniert für mich. Bitte poste ein [mcve]. – fabian
Eine vollständige fxml + Controller-Klasse (+ der Code zum Laden der fxml vielleicht?) Würde uns das Problem zeigen ... Die einzigen Schritte, die ich getan habe, um diese Arbeit zu machen, ist den 'Button' und' FlowPane' in eine 'VBox zu wickeln 'und füge dein Code-Snippet dem Controller hinzu. Übrigens: Dein Elternteil ist nicht zu klein, um die zusätzlichen Kinder des FlowPane zufällig zu zeigen. – fabian