#css #javafx #fxml
#css #javafx #fxml
Вопрос:
У меня проблема, когда мой FXML инициализирован, а их значения прослушиваются слушателями.
Итак, мое главное окно представляет собой BorderPane
- TOP = menu.fxml
- CENTER = center1.fxml
- BOTTOM = нижний колонтитул.fxml
Когда я нажимаю на одну из кнопок в center1Controller
ЦЕНТРЕ, fxml должен измениться на center2.fxml
.
У center2.fxml
меня есть Pane
, который должен быть Anchor.anchorLeft=60
и anchorTop = anchorBottom
Я был создан слушателем :
public void addTopOffsetListener() {
this.logonWindowPane.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
double y = (newValue.doubleValue() - logonForm.getHeight()) / 2;
logonForm.setLayoutY(y);
}
});
}
Но один из моих экранов перезагружает форму входа в систему в неправильном месте. Когда я выполняю отладку, инициализация getHeight()
возвращает 0.
Он размещается в правильном месте после изменения размера окна.
Я пробовал фиксированный размер этого элемента в FXML и в CSS.
На самом деле я нашел обходной путь. Когда я инициализирую screen2Controller a, я добавил эту строку
public void initialize(URL url, ResourceBundle rb) {
this.logonForm.resize(300, 400);
}
Вот мой Screen2 fxml :
<AnchorPane id="logonWindowPane" fx:id="logonWindowPane" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="genealogytree.application.fxmlcontrollers.LogonWindowController">
<stylesheets>
<URL value="@../styles/application_logon.css" />
</stylesheets>
<children>
<Pane id="logonForm" fx:id="logonForm" prefHeight="400" prefWidth="300" minWidth="300" minHeight="400" styleClass="projectPane" AnchorPane.rightAnchor="60.0" />
</children>
</AnchorPane>
И FXML элемента там, который я ввел в logonForm :
<Pane styleClass="logonFXForm" prefHeight="400" prefWidth="300" minWidth="300" minHeight="400" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="genealogytree.application.fxmlcontrollers.LogonFormController">
<stylesheets>
<URL value="@../styles/application_logon.css" />
</stylesheets>
<children>
<JFXPasswordField focusColor="#1f7f6a" layoutX="38.0" layoutY="133.0" maxWidth="224.0" minWidth="224.0" prefHeight="48.0" prefWidth="224.0" promptText="Password" unFocusColor="#253930">
<font>
<Font size="14.0" />
</font>
</JFXPasswordField>
<JFXTextField focusColor="#1f7f6a" layoutX="38.0" layoutY="54.0" maxWidth="224.0" minWidth="224.0" prefHeight="48.0" prefWidth="224.0" promptText="Login" unFocusColor="#253930">
<font>
<Font size="14.0" />
</font>
</JFXTextField>
<JFXButton buttonType="RAISED" graphicTextGap="8.0" layoutX="61.0" layoutY="224.0" prefHeight="48.0" prefWidth="178.0" ripplerFill="#32ae8f" styleClass="jfxButton" text="CONNECT" textAlignment="CENTER">
<font>
<Font name="System Bold" size="18.0" />
</font>
</JFXButton>
<Hyperlink layoutX="38.0" layoutY="305.0" prefHeight="25.0" prefWidth="250.0" text="Do not have an Account ? " />
<Hyperlink layoutX="38.0" layoutY="340.0" prefHeight="25.0" prefWidth="250.0" text="Forgotten Password ? " />
</children>
</Pane>
Но есть другой способ решить мою проблему только в FXML или CSS?
Комментарии:
1. У вас есть параметры свойств в конструкторе сцен, попробуйте использовать их для открытия файла fxml и установки панели в нужное место
2. это не работает, потому что в момент инициализации он сбрасывается. На самом деле в SceneBuilder моя панель находится сверху. И после инициализации верхняя часть logonForm находится по центру (вертикально) LogonWindow (center2).
3. Пожалуйста, посмотрите на эту ссылку docs.oracle.com/javafx/2/layout/builtin_layouts.htm существуют встроенные макеты, и вы можете использовать их, если это не помогает, пожалуйста, попробуйте скрывать и показывать объекты с помощью метода setVisible в вашей сцене.
4. Нет, это не помогает.
5. есть еще идеи??