我的舞台包含 aToggleSwitch
和两个StackPanes
,我们将其称为 A 和 B。两个 StackPanes 都位于 parent 内的同一空间中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();
}
}
此处找到的答案使用 Toggle Groups,而 James在此处的答案使用 Buttons。我找不到解决方案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);
}
});
}
}