gpt4 book ai didi

java - 向 JavaFX ToggleSwitch 添加更改监听器

转载 作者:行者123 更新时间:2023-11-30 07:39:05 24 4
gpt4 key购买 nike

我的舞台包含一个 ToggleSwitch 和两个 StackPanes,我们将其称为 A 和 B。这两个 StackPanes 位于父 StackPane< 内的同一空间中。这意味着如果 A 和 B 都可见并设置为托管,则它们各自占用一半的分配空间,如下所示:

enter image description here

我试图在初始化时隐藏 StackPane B,以便 StackPane A 占据全部空间...然后当我单击切换按钮时,它应该隐藏 StackPane A 并显示 StackPane B,使 B 占据全部空间空间。

StackPane B 的初始隐藏工作正常,但我在为 Controller 类中的 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();
}
}

找到答案here使用切换组,詹姆斯的回答 here使用按钮。我找不到 ToggleSwitch 的解决方案。我尝试调整第一个答案以与 ToggleSwitch 一起使用,但它产生了如下错误:

enter image description here

并说

Cannot resolve method 'addListener(anonymous javafx.beans.value.ChangeListener)'

如何修复监听器?

Controller 类:

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);
}
});
}
}

最佳答案

您还可以使用 JavaFx 的 Binding API,如下所示,

@Override
public void initialize(URL location, ResourceBundle resources) {
paneA.managedProperty().bind(toggleSwitch.selectedProperty());
paneA.visibleProperty().bind(toggleSwitch.selectedProperty());
paneB.managedProperty().bind(toggleSwitch.selectedProperty().not());
paneB.visibleProperty().bind(toggleSwitch.selectedProperty().not());
}

}

关于java - 向 JavaFX ToggleSwitch 添加更改监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34947685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com