在JavaFX中,是否有可能具有透明的场景,阶段和控件?

时间:2014-12-14 10:01:21

标签: java javafx window transparent scene

我有一个自定义控件,它是3个简单的按钮。控件处理与其绑定的应用程序的操作,但出于原因,它必须驻留在外部阶段。

令人烦恼的是,所有按钮之间都是白色背景。

我已经尝试了以下所有方法来消除它:

  • 将Stage StageStyle初始化为透明
  • 使用透明背景声明场景:new Scene(Node, X, Y, Color.TRANSPARENT);
  • 使用NULL背景声明场景:new Scene(Node, X, Y, null);
  • 拥有控件(扩展HBox).setStyle("-fx-background-color : rgba(0, 0, 0, 0);");

所有这些都未能消除背景的外观。 我已经使用Windows Forms完成了这项工作,但可以使用JavaFX吗?

1 个答案:

答案 0 :(得分:1)

您需要设置

的透明度
  • 舞台
  • 场景
  • 根类(或者在我的情况下是hbox,我更喜欢root)

这对我有用:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        try {

            HBox hbox = new HBox();
            hbox.setSpacing(12);

            Button button1 = new Button("Button 1");
            Button button2 = new Button("Button 2");
            Button button3 = new Button("Button 3");

            hbox.getChildren().addAll(button1, button2, button3);

            Scene scene = new Scene(hbox, Color.TRANSPARENT);

//          scene.getStylesheets().add( getClass().getResource("application.css").toExternalForm());
            scene.getRoot().setStyle("-fx-background-color: transparent");

            primaryStage.initStyle(StageStyle.TRANSPARENT);
            primaryStage.setScene(scene);
            primaryStage.show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这是直接的解决方案。当然,不是直接设置样式,而是使用样式表application.css:

.root {
    -fx-background-color: transparent;
}

这是一个应用程序在代码上的屏幕截图:

enter image description here