Я пытаюсь создать меню для своей игры с помощью JavaFX. Я хочу иметь кнопку «Продолжить», которую я хочу видеть только во время игры. Я пытаюсь связать свойство видимости кнопки с контроллером, но он не работает, кнопка просто невидима.Как связать видимость с контроллером в JavaFX
Я осмотрел Google и StackExchange, и я нашел информацию о том, как установить его программным путем, но я бы не хотел, чтобы Java-код был более жестким для FXML, чем мне действительно нужно.
Вот мой код страницы FXML ...
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<GridPane fx:controller="com.silferein.erq.gui.MenuController"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<padding><Insets top="25" right="25" bottom="25" left="25"/></padding>
<Text id="welcome-text" text="Main Menu" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/>
<Button text="New" onAction="#handleNew" GridPane.rowIndex="1"/>
<Button text="Continue" onAction="#handleContinue" GridPane.rowIndex="2" visible="${controller.gameRunning}" />
<Button text="Load" onAction="#handleLoad" GridPane.rowIndex="3"/>
<Button text="Save" onAction="#handleSave" GridPane.rowIndex="4"/>
<Button text="Quit" onAction="#handleQuit" GridPane.rowIndex="5"/>
</GridPane>
Вот мой код контроллера (подстриженной несколько):
@FXML protected void handleContinue(ActionEvent event) {
System.out.println("Continue!");
parent.handle(new GUIEvent(GUIEvent.Type.CONTINUE));
}
// ...
@FXML protected boolean getGameRunning() {
System.out.println("Test!");
// Some check to see if there's a game in progress...
return true;
}
Любая идея, что я делаю неправильно? Мой код компилируется, и все кнопки, кроме «Продолжить», видны и работают.
Правильно ли я понимаю: код содержит BooleanProperty, который будет истинным, если игра запущена, и метод BooleanProperty gameRunning() возвращает это свойство? Или метод getGameRunning() должен быть опрошен для получения статуса выполнения? –
Вам могут быть интересны методы, используемые в ответе на [Есть ли способ реализовать свойство «rendered» на JAVAFX?] (Http://stackoverflow.com/questions/19666982/is-there-a-way -to-implementation-a-property-like-rendered-on-javafx), в котором обсуждается манипулирование видимостью на основе условий (в этом случае это основанные на ролях условия, поэтому не совсем применимы к вашей ситуации, но, вероятно, полезно понять). – jewelsea