Javafx как сделать так, чтобы anchorpane заполнял ячейку gridpane ?
всем привет.
Я делаю приложение, в котором у меня есть ячейка сетки. там я хочу разместить элементы управления, которые заполняют всю ширину ячейки. я достиг этого с помощью кнопки, но я не могу заставить ее работать с моим пользовательским элементом управления. это код, который я использую для калибровки:
Button b = new Button("delete"); b.setMaxWidth(Double.MAX_VALUE); GridPane.setFillWidth(b, true); gridPane.add(b,0,0); WLAcordionControl w = new WLAcordionControl(); w.controller.Main.setMaxWidth(Double.MAX_VALUE); GridPane.setFillWidth(w.controller.Main, true); gridPane.add(w,0,1);
и вот какой результат я получаю ссылка на изображение
вот код fxml моего пользовательского элемента управления:
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Accordion?> <?import javafx.scene.control.TextArea?> <?import javafx.scene.control.TitledPane?> <?import javafx.scene.layout.AnchorPane?> <AnchorPane fx:id="Main" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> <children> <Accordion AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <panes> <TitledPane id="Container" fx:id="Container" animated="false" text="untitled 1"> <content> <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"> <children> <TextArea id="text" fx:id="text" layoutX="19.6" layoutY="19.6" prefHeight="354.0" prefWidth="787.0" AnchorPane.bottomAnchor="0.5" AnchorPane.leftAnchor="0.5" AnchorPane.rightAnchor="0.5" AnchorPane.topAnchor="10.0" /> </children> </AnchorPane> </content> </TitledPane> </panes> </Accordion> </children> </AnchorPane>
код контроллера мой пользовательский элемент управления по
package ArticleControls.wlAcordion; import ArticleControls.ArticleControl; import javafx.fxml.FXML; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; public class WLAcordionController extends ArticleControl { @FXML public AnchorPane Main; public WLAcordionController(){ } @Override public Object GetData() { return null; } }
и это код самого пользовательского элемента управления:
package ArticleControls.wlAcordion; import javafx.fxml.FXMLLoader; import javafx.scene.Node; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import java.io.IOException; public class WLAcordionControl extends AnchorPane { public WLAcordionController controller; public WLAcordionControl(){ super(); try { FXMLLoader loader = new FXMLLoader(getClass().getResource("WlAcordion.fxml")); controller = new WLAcordionController(); loader.setController(controller); Node n = loader.load(); this.getChildren().add(n); } catch (IOException ix){ } } }
Спасибо за помощь.
Что я уже пробовал:
Сначала я попробовал сделать это с помощью vbox, но это тоже не сработало.