Я использую JavaFX и хотел бы, чтобы при нажатии кнопки в поле расстановки создавалась и отображалась новая радиокнопка. Это возможно? Я пытался это сделать, но ничего не появляется.Создайте новые параметры переключателя во время выполнения
Редактировать: Проблема возникает из метода insertDemand() в классе Controller. Появятся переключатели, если я удалю первые две строки метода. Я понятия не имею, почему он это делает. Но мне нужно, когда на кнопку будет нажата строка, которая появится на экране, а также появится радиокнопка, поэтому удаление этих двух строк не является возможным решением.
Вот 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>
Вот класс контроллера:
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);
}
}
Спрос класс я сделал. При создании отображается строка:
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;
}
}
}
Спасибо за вашу помощь :)
Edit 2: Я нашел, как заставить его работать. Не знаю, почему это исправляет проблему, но если вы перенесите первые две строки метода insertDemand() в нижнюю часть, чтобы сначала создать радиокнопку, а затем создать объект Deman, то он будет работать.
Я не эксперт здесь, но, я думаю, вам нужно использовать Java API для добавления новых переключателей во время выполнения. – Thomas
Работает для меня. Пожалуйста, опубликуйте [mcve]. – fabian
Полный класс fxml + controller (+ код, используемый для загрузки fxml, может быть?) Покажет нам проблему ... Единственные шаги, которые я сделал для выполнения этой работы, - это обернуть 'Button' и' FlowPane' в 'VBox 'и добавьте фрагмент кода в контроллер. Кстати: ваше окно/родитель 'FlowPane' не слишком мал, чтобы случайно показать дополнительных дочерних элементов« FlowPane »? – fabian