な下の画像のようにI透明のステージを作りたい、(Windows 7の)javaFXを使用して透明なウィンドウステージを作成するにはどうすればよいですか?
だから私はそのフォームのscreencaptureメソッドを作ってみました..しかし、それは...
を混乱されましたここに私のコードでは、うまくいけば、それは問題でよりよく説明することができ、次のとおりです。
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);
}
}
あなたの答えはいいです..しかし、それは窓7エアロ効果のように動作しません..あなたがプログラムを実行した後、あなたは画面の背後に変更..しかし、プログラムの透明な外観は変更されません.... –
はいそれが私が最後の段落で取り上げたものです。 –
あなたは最後の段落で言ったwritableImageを使って正しいコードを私に送ることができますか? –