如何使 JavaFX 舞台透明(仅限舞台)
How to make JavaFX stage transparent (Stage Only)
下面的示例仅适用于文本,但是一旦我将按钮添加到舞台上,透明按钮就会变为非活动状态
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class Main extends Application {
@Override
public void start(Stage stage) {
stage.initStyle(StageStyle.TRANSPARENT);
Text text = new Text("!");
text.setFont(new Font(40));
VBox box = new VBox();
Button btn = new Button("Test transparent");
box.getChildren().addAll(text, btn);
//if I removed the btn, transparent works as expected.
final Scene scene = new Scene(box,300, 250);
scene.setFill(null);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我要的是只让舞台透明但显示文本和按钮
在那种情况下,您的 Button
不是问题。默认情况下 VBox
具有灰色背景,因此您的 Stage
是透明的,但 VBox 不是。您必须通过 CSS 文件或内联或代码设置透明背景:
CSS:
.your-vbox {
-fx-background-color: transparent;
}
内联:
box.setStyle("-fx-background-color: transparent;");
代码:
box.setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));
下面的示例仅适用于文本,但是一旦我将按钮添加到舞台上,透明按钮就会变为非活动状态
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class Main extends Application {
@Override
public void start(Stage stage) {
stage.initStyle(StageStyle.TRANSPARENT);
Text text = new Text("!");
text.setFont(new Font(40));
VBox box = new VBox();
Button btn = new Button("Test transparent");
box.getChildren().addAll(text, btn);
//if I removed the btn, transparent works as expected.
final Scene scene = new Scene(box,300, 250);
scene.setFill(null);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我要的是只让舞台透明但显示文本和按钮
在那种情况下,您的 Button
不是问题。默认情况下 VBox
具有灰色背景,因此您的 Stage
是透明的,但 VBox 不是。您必须通过 CSS 文件或内联或代码设置透明背景:
CSS:
.your-vbox {
-fx-background-color: transparent;
}
内联:
box.setStyle("-fx-background-color: transparent;");
代码:
box.setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));