我正在开发一款应用。它的视觉结构如下:
ApplicationLayout有一个页眉和页脚(页脚尚未实现),看起来像这样:
我已经设法通过将StackPane设置为BorderPane的中心来实现页面之间的fadeIn / fadeOut过渡,将页面添加到页面,最重要的是,添加一个白色的VBox。所以在我进行页面切换之前,我使用这个白色VBox的FadeTransitions。
我必须这样做,因为setOpacity()
由于某种原因不会改变文本字段或按钮不透明度。
现在我正在努力为标题做同样的事情。所以我在顶部设置了一个StackPane,并在其上添加了一个“header coverer”,它应该像以前一样完成这个技巧(不能修改标题,箭头或描述的不透明度属性)因为CSS覆盖)。
但是这次它不起作用,如果我将标题coverer的不透明度设置为除0以外的任何内容,标题中的内容都不显示。
我想要实现的是fadeOut / FadeIn标题的组件而不是橙色的HBox。
编辑:添加了一个最不适合我的例子
public class Main extends Application {
private Boolean buttonPressed = false;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
BorderPane appWindow = new BorderPane();
appWindow.setStyle("-fx-alignment: center; -fx-padding: 30 0 0 30");
appWindow.setBackground(new Background(new BackgroundFill(Color.PERU, null, null)));
GridPane loginContainer = new GridPane();
appWindow.setCenter(loginContainer);
TextField username = new TextField();
PasswordField password = new PasswordField();
Label userNameDesc = new Label("Username");
Label passwordDesc = new Label("Password");
Button logInBtn = new Button("Log In");
logInBtn.setTranslateX(100);
logInBtn.setTranslateY(20);
logInBtn.setOnAction(event -> {
if (!buttonPressed) {
appWindow.getCenter().setOpacity(30);
buttonPressed = true;
System.out.println("Opacity set to " + appWindow.getCenter().getOpacity());
}
else {
appWindow.getCenter().setOpacity(100);
buttonPressed = false;
System.out.println("Opacity set to " + appWindow.getCenter().getOpacity());
}
});
loginContainer.addColumn(0, userNameDesc, passwordDesc);
loginContainer.addColumn(1, username, password);
loginContainer.add(logInBtn, 1, 2);
Scene scene = new Scene(appWindow, 300, 250);
stage.setScene(scene);
stage.show();
}
}
按“登录”按钮会影响Gridpane和Gridpane子视觉不透明度,但事实并非如此。它只打印正确的不透明度值。
答案 0 :(得分:1)
不透明度指定为0到1之间的值。小于0的值被视为0,大于1的值被视为1。
因此,将值设置为30
或100
无效:两者都被视为完全不透明(即它们被钳制在1
)。
更换
appWindow.getCenter().setOpacity(30);
与
appWindow.getCenter().setOpacity(0.3);
将使中心内容部分透明。