【问题标题】:Is it possible to, in JavaFX, have a scene, stage, and control that are all transparent?是否有可能在 JavaFX 中拥有全透明的场景、舞台和控件?
【发布时间】:2015-02-12 14:43:22
【问题描述】:
我有一个自定义控件,它是 3 个简单的按钮。该控件处理与其绑定的应用程序的操作,但出于某种原因,它必须驻留在外部阶段。
令人讨厌的是所有按钮之间都是白色背景。
我已经尝试了以下所有方法来消除它:
- 将 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 窗体完成了此操作,但可以使用 JavaFX 吗?
【问题讨论】:
标签:
java
javafx
window
transparent
scene
【解决方案1】:
需要设置透明度
- 舞台
- 场景
- 根类(或者在我的情况下是 hbox,我更喜欢根)
这对我有用:
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;
}
这是应用程序在代码上的屏幕截图: