OS = Ubuntu; JDK = 1.7.0_10
全般的:
私が欲しいのは、デスクトップウィジェットとして一般的に利用できるもの(たとえば、compizやgromitの注釈)ですが、Javaでそれを行う方法はありますか?
フルスクリーン、透明、クリック可能である1つのjframeまたはウィンドウを作成したいのですが、常に一番上に表示されます。jframe内で、画面の特定のポイントに配置されるコンポーネント(テキスト、画像、長方形など)を追加/削除します。これらのコンポーネントは不透明で、常に一番上にある必要があります。可能であれば、クリックスルーを許可する必要があります。
例:デスクトップでいくつかのアプリを開いています。ウィンドウの周りに長方形を描画することに焦点を当てているウィンドウの周りにボックスを自動的に描画したいのですが、アプリケーションを使用できるようにするために、長方形の領域は透明でクリック可能である必要があります。
問題:
上部にとどまるがクリックスルーできない透明なフレームを作成できますが、フレームに追加するコンポーネントはいずれの場合も透明になります。
JFrame frame = new JFrame("MyFrame");
frame.setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize());
frame.setLocation(0,0);
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(true);
//frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false); //apple
frame.getContentPane().setLayout(new BorderLayout());
System.setProperty("sun.java2d.noddraw", "true");
AWTUtilities.setWindowOpaque(frame, false);
AWTUtilities.setWindowOpacity(frame, 0.0f);
JLabel label = new JLabel("Hello NOT transparent label");
label.setOpaque(true);
label.setBackground(new Color(255, 0, 0));
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
URLから読み込まれた透明な画像でIconImageを設定することで、フレームを透明でクリック可能にすることができます。これは、画像がURLから読み込まれる場合は機能しますが、ローカルファイルから画像を読み込む場合は機能しません(なぜ?!?)。この場合も、フレームにコンポーネントを追加しても表示されません。
try {
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(new URL("http://i.imgur.com/xtZK0.png")));
} catch (MalformedURLException e) {e.printStackTrace();}
JFXPanelを追加しようとしましたが、成功しませんでした。コンポーネントをGlassPaneに追加しようとしましたが、成功しませんでした。
1週間の集中的なテストと検索の後、誰かが私に解決策または正しいヒントを教えてくれることを願っています。
ありがとう。