Моя сцена содержит ToggleSwitch
и два StackPanes
, которые мы назовем A и B. Обе панели стека расположены в одном и том же пространстве внутри родительского StackPane
. Это означает, что если и A, и B видимы и установлены как управляемые, каждый из них занимает половину выделенного пространства, как показано ниже:
Я пытаюсь скрыть StackPane B при инициализации, чтобы StackPane A занимал все пространство... а затем, когда я нажимаю кнопку переключения, он должен скрывать StackPane A и отображать StackPane B, заставляя B занимать все пространство.
Первоначальное сокрытие StackPane B работает нормально, но у меня возникли проблемы с написанием прослушивателя изменений для ToggleSwitch
в моем классе контроллера. Вот мой код, и где у меня проблемы:
класс приложения:
public class showPanes extends Application {
Stage stage = new Stage();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws IOException {
StackPane root = (StackPane) FXMLLoader.load(Drag.class.getResource("twoPanes.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Pane Switcher");
scene.getStylesheets().add("styleMain.css");
stage.setScene(scene);
stage.show();
}
}
Ответ, найденный здесь, использует группы переключения, а ответ Джеймса здесь используются кнопки. Я не могу найти решение для ToggleSwitch
. Я попытался адаптировать первый ответ для использования с ToggleSwitch
, но он выдает ошибку, например:
и говорит
Не удается разрешить метод «addListener (анонимный javafx.beans.value.ChangeListener)»
Как исправить прослушиватель?
класс контроллера:
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import java.net.URL;
import java.util.ResourceBundle;
import org.controlsfx.control.ToggleSwitch;
public class compsController implements Initializable {
@FXML
private StackPane paneA, paneB;
@FXML
private ToggleSwitch toggleSwitch;
@Override
public void initialize(URL location, ResourceBundle resources) {
paneB.setManaged(false);
paneB.setVisible(false);
toggleSwitch.selectedProperty().addListener(new ChangeListener < ToggleSwitch > () {
@Override
public void changed(ObservableValue < ? extends ToggleSwitch > ov, ToggleSwitch t, ToggleSwitch t1) {
paneA.setManaged(false);
paneA.setVisible(false);
paneB.setManaged(true);
paneB.setVisible(true);
}
});
}
}
ToggleSwitch.selectedProperty()
возвращаетBooleanProperty
, а неProperty<ToggleSwitch>
. - person James_D   schedule 22.01.2016fire
, но ошибка остается. Есть подсказки?? :/ - person Mathomatic   schedule 22.01.2016ChangeListener<Boolean>
, а неChangeListener<ToggleSwitch>
. - person James_D   schedule 22.01.2016