ではできません。 JavaFX。
あなたは私の答えhereをチェックアウトすることができます。それは最も近いことです。しかし、デスクトップ全体に透明なキャンバスを重ね合わせたり、マウスのイベントを基になるウィンドウに転送することはできません。
キャンバスを半透明にすると、すべてのイベントがキャッチされますが、基礎となるウィンドウが表示されます。しかし、キャンバスを完全に透明にすると、アプリケーションはイベントをキャッチしません。
ただし、「具体的な例」は別の方法で解決できます。ここでは、コードです:
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class CircleAroundCursor extends Application {
double radius = 50;
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Circle circle = new Circle(radius * 2,radius * 2,radius);
circle.setStroke(Color.RED);
circle.setFill(Color.TRANSPARENT);
root.getChildren().add(circle);
Scene scene = new Scene(root, Color.TRANSPARENT);
scene.getRoot().setStyle("-fx-background-color: transparent");
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setAlwaysOnTop(true);
AnimationTimer loop = new AnimationTimer() {
@Override
public void handle(long now) {
PointerInfo info = MouseInfo.getPointerInfo();
Point p = info.getLocation();
primaryStage.setX(p.getX() - radius * 2);
primaryStage.setY(p.getY() - radius * 2);
}
};
loop.start();
}
public static void main(String[] args) {
launch(args);
}
}
この少なくともを解決し、「それはどこへ行っても、私は赤い丸を作りたいが、ユーザーのマウスカーソルを囲むが、ユーザーの入力が中断されることはありません」
注:ここではAWTクラスはFXクラスと混在しています。 EDT & FXスレッド処理を使用する必要があります。それはなくても動作します。
スクリーンショット:
赤丸の例を実行していて、ユーザーのマウス入力が実際に中断されています。基本的にどこでもクリックすると(テキストの選択など)は機能しません。私はMac OSXを使用していますが、マウスクリックが中断されていない唯一の部分はドックにあります。これはアプリケーションがドックにオーバーレイできないためです。 – Voldemort
これはWindows 10で動作します。しかし、私が言ったように、あなたが望むのは普通のJavaFXでは不可能です。OS固有のコーディングを使用する必要があります。 – Roland
'setMouseTransparent(true)'や 'setPickOnBounds(false)'を使ってみましたか? – jns