Je veux faire une scène transparente, comme l'image ci-dessous (Windows 7)Comment créer une scène de fenêtre transparente en utilisant javaFX?
J'ai donc essayé de faire cette méthode sous forme de screencapture .. mais il était confus ...
Voici mon code, nous espérons qu'il peut expliquer mieux la question:
import javafx.application.*;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.effect.*;
import javafx.scene.image.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class Demo extends Application{
private static final double BLUR_AMOUNT = 7;
private static final Effect myBlur = new BoxBlur(BLUR_AMOUNT, BLUR_AMOUNT, 3);
private static final ImageView background = new ImageView();
private static final StackPane layout = new StackPane();
private Button btn=new Button("hello");
@Override
public void start(Stage stage) {
layout.getChildren().addAll(background,btn);
layout.setStyle("-fx-background-color: null");
Scene scene = new Scene(layout,300, 300,Color.TRANSPARENT);
stage.initStyle(StageStyle.TRANSPARENT);
stage.setScene(scene);
stage.show();
stage.setX(0);
stage.setY(0);
background.setImage(copyBackground(stage));
background.setEffect(myBlur);
makeDraggable(stage);
}
private static class Delta {
double x,y;
}
public void makeDraggable(final Stage stage) {
final Delta dragDelta = new Delta();
btn.setOnMousePressed(mouseEvent -> {
dragDelta.x = stage.getX() - mouseEvent.getScreenX();
dragDelta.y = stage.getY() - mouseEvent.getScreenY();
});
btn.setOnMouseDragged(mouseEvent -> {
stage.setX(mouseEvent.getScreenX() + dragDelta.x);
stage.setY(mouseEvent.getScreenY() + dragDelta.y);
btn.setOpacity(0.0);
background.setImage(copyBackground(stage));
});
btn.setOnMouseReleased(mouseEvent -> {
btn.setOpacity(1.0);
});
}
private Image copyBackground(Stage stage) {
final int X = (int) stage.getX();
final int Y = (int) stage.getY();
final int W = (int) stage.getWidth();
final int H = (int) stage.getHeight();
try {
java.awt.Robot robot = new java.awt.Robot();
java.awt.image.BufferedImage image = robot.createScreenCapture(new java.awt.Rectangle(X, Y, W, H));
return SwingFXUtils.toFXImage(image, null);
} catch (java.awt.AWTException e) {
System.out.println("The robot of doom strikes!");
return null;
}
}
public static void main(String[] args) {
launch(args);
}
}
votre réponse est bonne .. mais il ne fonctionne pas comme windows 7 effet aéro .. Je veux dire lorsque vous exécutez après le programme, puis vous changez derrière l'écran .. mais aspect transparent du programme est change pas .... Oui –
, c'est ce que j'ai abordé dans le dernier paragraphe. –
alors pouvez-vous m'envoyer un bon code en utilisant writableImage que vous avez dit dans le dernier paragraphe ....? –