dolfijn3000 Ответов: 1

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, но это тоже не сработало.

1 Ответов

Рейтинг:
11

dolfijn3000

ладно, я все исправил. это была глупая ошибка с моей стороны.
проблема была в том, что когда я добавил свой контроль, я сделал это

gridPane.add(w,0,1);

но это было необходимо
gridPane.add(w.controller.Main,0,1);