내가 그런 아래 그림과 같이 투명 무대를 만들고 싶어 (윈도우 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를 사용하여 올바른 코드를 보내 주실 수 있습니까? –