[英]How to align JFoenix snackbar?
更新:我已更改为 BorderPane 并尝试使用 pane.setBottom(),但无济于事。
我正在使用 JFoenix 库,并且想知道如何对齐左下角的小吃栏。 目前它在底部中心对齐,这是默认的 alignment。
MWE(一切都在 package应用程序中):
Controller.java
package application;
import com.jfoenix.controls.JFXSnackbar;
import com.jfoenix.controls.JFXSnackbar.SnackbarEvent;
import com.jfoenix.controls.JFXSnackbarLayout;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.util.Duration;
public class Controller {
@FXML private AnchorPane pane;
@FXML Button snackbarButton;
public void snackBarAction() {
JFXSnackbar snackbar = new JFXSnackbar();
pane.setBottom(snackbar);
snackbar.fireEvent(new SnackbarEvent(
new JFXSnackbarLayout("Snackbar Message"),
Duration.seconds(2), null));
}
}
主.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent parent = FXMLLoader.load(getClass().getResource("scene.fxml"));
Scene scene = new Scene(parent);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
场景.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane fx:id="pane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
<center>
<Button fx:id="snackbarButton" mnemonicParsing="false" onAction="#snackBarAction" text="Button" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
预期行为:BorderPane 的底部(如果它包含任何内容)被移除并替换为小吃店吐司。
实际行为:BorderPane 的底部确实被移除了(我尝试添加一个按钮,当按预期方式按下snackbarButton 时它被移除),但snackbar 显示在左下角。 无论我将它设置在哪里,小吃栏消息都将始终出现在左上角附近。
您可以使用 setTranslateX() 和 setTranslateY() 移动快餐栏。 但是,在将 Snackbar 绘制在屏幕上之前,您不知道它的宽度。 因此,您必须将 translateXProperty 绑定到 SnackbarLayout widthProperty 和 Anchorpan 宽度属性,如下所示。
JFXSnackbar snackbar = new JFXSnackbar(pane);
JFXSnackbarLayout snackbarLayout = new JFXSnackbarLayout("Snackbar Message");
snackbar.translateXProperty().bind(snackbarLayout.widthProperty().divide(2).subtract(pane.widthProperty().divide(2)));
snackbar.fireEvent(new SnackbarEvent(
snackbarLayout,
Duration.seconds(2), null));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.