繁体   English   中英

如何对齐 JFoenix 快餐栏?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM