2011-10-04 6 views
5

はい、この質問はどこにでもあります。しかし、(作業中の)すべてのソリューションは、制限されたAWTUtilitiesツールキットを使用します。Java - 透明なJFrame、制限付きライブラリなし

So.私はちょうど私のウィンドウの不透明度を制御したい。形状やデコレートする必要はありません。透明なcontentPane(簡単)と透明なJFrameの背景(ばかげて難しい)。

私は昨日正しいものを手に入れましたが、今は再現できないようです。 AWTUtilitiesを使用せずにそこにいくつかのソリューションがありますが、彼らは動作しません...誰かが良い解決策を持っていますか?

私の失敗コードの例:

public static void main(String[] args) { 
    JFrame test = new JFrame(); 
    test.setSize(400, 400); 
    test.setLocationRelativeTo(null); 
    test.setUndecorated(true); 
    test.setBackground(new Color(0, 0, 0, 0)); 
    test.getContentPane().setBackground(new Color(0,0,0,0)); 
    test.setVisible(true); 
} 

が、これはただの白い四角になります。閉じてもシガーはありません。私はまた、paintメソッドをオーバーライドしようとしました。誰かがアルファチャンネルを投げ捨てることについて何か言っていましたが、それは黒くなりました。だから...スタックオーバーフローです。

これにちょうど答えた二重引用符がある場合は、私にそれを指摘してください。すぐに削除します。

更新コメントでリクエスト毎 が、ここで私がここに着いたかの歴史です:

誰もが到着最初のリンクはhow to create translucent and shaped windows.でこれはと「...フレーム半透明に似た存在で複数の行を持っています不透明度は75%です」だから...彼らは少なくともその記事で同じように定義されているように見えます。残念ながら、彼らはライブラリを使用しています。

私は追いかけることができカップルのリンク:

非作業「作業」ソリューションはいくつかの希望を示したが、私はそれが働いて得ることができませんでしたhttp://www.java-gaming.org/index.php?topic=24635.0で報告されます。

http://techgearup.wordpress.com/2008/09/19/transparent-jframe-background/は、スクリーンショットを使用したハック的な方法で、他のいくつかの場所で複製されます。

+3

Java 7を使うことができますか?いくつかの実用的なソリューションにリンクして、あなたが試したことを見ることができますか? –

+1

_opacity_と_transparency_を[confound](http://stackoverflow.com/questions/3517722/java-transparent-jscrollpane/3518047#3518047)しないでください。 – trashgod

+0

合意すると、これはJava 7の新機能の1つです。http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html –

答えて

1

ネイティブコードを呼び出すJava v.6u10 +またはサードパーティのライブラリを使用しないと、これを行うことはできません。スイングフレームでは、ダイアログとWindowsは「トップレベルコンポーネント」とみなされ、基になるウィンドウシステムにレンダリングされます。 Java v6u10より前では、すべての最上位コンポーネントにデフォルトの不透明な淡灰色の背景があり、これをJavaコードから変更する方法はありませんでした。

+0

明らかに、Java 6u10は2008年10月からリリースされています。 Java 6u10以降のリリースでは、これをどのように実現できますか? – Ben

+0

6u10では、AWTUtilitiesを使用しなければなりません。その後、7つのメソッドがWindowやその他のクラスにメソッドを追加しました。 http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html#6u10(AWTUtilitiesの設定は「制限」されていますが、これは基本的にJavaが提供する唯一の方法です。 ) – Nate

+0

助けてくれてありがとう。私はオープンソースプロジェクトに取り組んでおり、ファイルの制限を解除する姿勢がわかりません。しかしそれは別の質問です: – Ben

0

Sigh私は同じ問題を抱えていて、それに多くの時間を費やして、自分のコンピュータに適切に設定された透明な画面を表示する方法を見つけました。しかし、フレームを透明に設定するとすぐに多くのことが止まります。どこにでもJTextArea宣言を使用すると、すぐに動作を停止します。それはエラーをスローしません!

ここにコードがありますが、これがいくつかの用途に使用されていることを願っています。あなたがそれを使って作業中のJScrollPaneを作ればPlzの返信:)

public class gui { 
    public frame f; 
    public String name = "Transparent?"; //name your frame * 
    public JButton exit = new JButton("Exit"); 
    public gui(){ //non-static context 
     f = new JFrame(name); 
     f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //* 
     f.setLocationRelativeTo(null); 
     f.setExtendedState(f.getExtendedState() | JFrame.MAXIMIZED_BOTH); 
     //maximizes window. if you dont want it, f.setSize(int, int) 
     f.setUndecorated(true); //necessary for setOpacity 
     f.setOpacity(.7f); //achieve trasparancy 
     f.setVisible(true); //show window 
     exit.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0){ 
       System.exit(0); 
      } 
     }); 
     f.add(exit, BorderLayout.CENTER); 
     //since X is not available in the window, make a button to exit 
    } 

    public static void main(){ 
     new gui(); 
    } 
} 
//* Note: since the default Window manager is set off with setUndecorated(true), 
// the name and buttons won't really show. 
+0

ああ、私は言及を忘れて、JTextFieldはまだ動作します。これまでに動作しなかったのはJTextAreaとJScrollPaneです。 私はまだ境界線をテストしていませんが、それは主な関心事ではありません – nkazuko

+1

Java命名規則を学び、それらに固執してください – kleopatra

関連する問題