概要: この記事では、Javaで透明性と異なった形の窓について議論する. Javaで 7 スイングは、この機能をサポートし、スイングのUIコンポーネントは、より柔軟でユーザーフレンドリーな作り.
はじめに: いくつかのアプリケーションで, 透明な窓は、その機能をサポートするための要件である. 今、Javaで, 透明性を実現することができる. 半透明のウィンドウはJFrameのコンポーネント上setOpacityというメソッドを実装することによって、その不透明度を変更することによって作成される. しかし、我々は、基礎となるオペレーティング·システムがサポートしている場合は半透明のウィンドウにのみ可能であることを理解する必要があります. そして、我々はまた、ウィンドウが飾られていないことを確認する必要があります. ウィンドウが装飾されていないようにするには, あなたはsetUndecorated呼び出す必要が (真) 方法. 一部の時間は、それはまた、UIウィンドウの形状を変更する必要がある. それを実装するには, 我々はcomponentResizedメソッド内setShapeメソッドを呼び出す必要があります. これは、再計算形状をウィンドウのサイズが変更されます.
バックグラウンド: javaのUIで, 透明感と形をした窓のためのサポートは、Swing / AWTコンポーネントの長い時間の需要があった. これらのプロパティへのネイティブ開発のアクセスのために戻っ長い時間から入手できます. しかし、それはコアJavaコンポーネントにアクセスできませんでした. Java6の以降で, 透明感と形をしたウィンドウのサポートが利用可能です. ピクセルレベルの透け感がまたJava7(商標)でサポートされていても当たり.
透明感と透明性のためのサポートのタイプ: ジャワ 7 サポートの次の3つのタイプがサポートされてい.
TRANSLUCENT: この機能では、ウィンドウは、異なる色を持っているが、不透明度と同じレベルのことができます. アルファ値は、全ての画素に対して同じになるように. この効果は、ウィンドウをオフにフェードするのに適している、その後徐々に減少し、アルファ値を増加させる.
PERPIXEL_TRANSLUCENT: このプロパティは、ウィンドウ自体の中に別のアルファ値をサポートしています. これは、ウィンドウの選択された領域をフェードするために使用され.
PERPIXEL_TRANSPARENT: このプロパティは、従来の長方形ではなく、ウィンドウの異なる形状をサポートしています. あたりのピクセルの透明性は、円のような異なる形状その後サポートされている場合, 三角形を作成することができます.
我々は、上記のいずれかのプロパティを使用する前に我々は嘘のオペレーティングシステムでのサポートをテストする必要があります. 試験はjava.awt.GraphicsDeviceクラスに属するisWindowTranslucencySupported方法を用いて行うことができる. それは、入力として、透明性の種類を取り、サポートを示すにはtrue / falseを返します.
私たちは半透明機能を実装するためのサンプルコードを確認してみましょう. この例では、テキスト領域に長方形の半透明ウィンドウを作成した. まず、透明性の効果を得るために装飾モードを無効にしている. その後私たちは、基礎となるオペレーティング·システムがサポートしている場合はチェックしたりしていない. サポートされている場合の効果はフレームウィンドウに表示されている.
Listing1: JFrameのウィンドウの透けを示すサンプル
インポート java.awt.Color;
インポート java.awt.GraphicsDevice;
インポート java.awt.GraphicsEnvironment;
インポート java.awt.GridBagLayout;
インポート java.awt.event.ComponentAdapter;
インポート java.awt.event.ComponentEvent;
インポート java.awt.geom.Rectangle2D;
インポート javax.swing.JFrame;
インポート javax.swing.JTextArea;
インポート javax.swing.SwingUtilities;
公共 クラス TransRecFrame 拡張 JFrameの {
/**
* 透明な長方形の枠を作成します。 85% 透明
*/
公共 TransRecFrame() {
スーパー(“半透明の矩形の枠”);
//レイアウトを設定する
ます。setLayout(新しい GridBagLayoutの());
//テキスト領域を作成する
ファイナル JTextAreaにtxtArea = 新しい JTextAreaに(5, 50);
txtArea.setBackground(色.CYAN);
加える(txtArea);
//装飾を無効にする呼び出し
setUndecorated(真);
//図形のサイズを変更するためにsetShape呼び出すとき widnow サイズが変更され
addComponentListener(新しい ComponentAdapter() {
@オーバーライド
公共 ボイド componentResized(ComponentEventと) {
setShape(新しい Rectangle2D.Double(0, 0, getWidth(), のgetHeight()));
}
});
//ウィンドウを作る 85% 透明な
setOpacity(0.85F);
//他のパラメータを設定
setLocationRelativeTo(ゼロ);
たsetSize(200, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(真);
}
公共 静的 ボイド メイン(文字列[] argsに) {
//グラフィック環境を作成します
ユースベンチャーのGraphicsEnvironment =のGraphicsEnvironment
.getLocalGraphicsEnvironment();
//OSがサポートしているかどうかをチェック 透光性
場合 (genv.getDefaultScreenDevice().isWindowTranslucencySupported(
GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {
System.out.printlnは(“OSは、透光性をサポートしています”);
新しい TransRecFrame();
}
}
}
透明感と形状をサポートする機能: Java7(商標)で透明感と窓の形状をサポートするために利用できる主に3つの機能があります.
- フルウィンドウ半透明: このアプローチでは、完全なウィンドウが半透明である.
- ピクセルあたりの透明感: このアプローチでは、ウィンドウの部分が半透明である
- 形をした窓: 卵のような別の形のウィンドウを作る, サークル, 長方形など.
ピクセルあたりの透明感:
我々はすでに、前の例で、完全なウィンドウ半透明にする方法を見てきました. 今、我々はそれらの背景色を使用して、半透明ピクセルの集合を作るの第二の部分について述べる. このシナリオを実装するにはいくつかの制限があります. ウィンドウはフルスクリーンであってはならないとシステムは、ピクセルレベルの透光性をサポートしている必要があります. 残りの手順は、上記の例に似ています.
次の例では、ピクセルレベルの透光がフレームに設定されている方法について説明します.
Listing2: ピクセルレベルの透光性のサポートを示すサンプル.
インポート javax.swing.*;
インポート パッケージjava.awt。*;
インポート java.awt.event.ActionEvent;
インポート java.awt.event.ActionListener;
公共 クラス PixelTranslucency 拡張 JFrameの {
公共 PixelTranslucency() {
スーパー(“ピクセルレベルの透光性を設定する”);
//JFrameのサイズを設定する
たsetSize(250, 250);
//レイアウト設定
getContentPane().ます。setLayout(新しい GridLayoutの(6, 6));
//ピクセル設定のためのコール
のために(int型 I = 0; 私 < 16; 私 ){
加える(新しい ピクセルパネル(255 – 私 * 12));
}
//背景やその他のプロパティを設定
setBackground(新しい 色(0, 0, 0, 0));
setLocationRelativeTo(ゼロ);
setVisible(真);
}
公共 静的 ボイド メイン(文字列[] argsに) {
ユースベンチャーのGraphicsEnvironment =のGraphicsEnvironment.getLocalGraphicsEnvironment();
//ウィンドウがサポートされているかどうかを確認 透光性
場合 (genv.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)) {
システム.外に.のprintln(“OSは、透光性をサポートしています”);
新しい PixelTranslucency();
}
} プライベート クラス ピクセルパネル 拡張 JPanelの {
プライベート ピクセルパネル(int型 pixl) {
スーパー();
setBackground(新しい 色(0, 0, 255, pixl));
}
}
}
成型されたWindows:
今、私たちは、Java7.The形ウィンドウでサポートされているもう一つの重要な機能は、ユーザの要件でどんな形状のすべてのタイプをサポートしていますについて説明します. この機能を使用すると、サークルのような任意の形状を作成するのに役立ちます, 三角形, ポリゴンまたは任意の可能な複雑な形状. ウィンドウクラスのsetShape方法は、プロパティを設定するために使用可能です. しかし、再び我々はフルスクリーンモードが許されるべきではないことを覚えておく必要があり、オペレーティング·システムは、透光性をサポートしています.
以下の例では、形のウィンドウの使用方法を示し.
Listing3: 形をしたウィンドウの使用方法を示すサンプルコード.
インポート javax.swing.*;
インポート パッケージjava.awt。*;
インポート java.awt.geom.Ellipse2D;
インポート java.awt.geom.GeneralPath;
公共 クラス JavaShapedWindow 拡張 JFrameの {
公共 JavaShapedWindow() {
スーパー(“形のウィンドウを設定”);
//効果を得るためにOFFに装飾されていない設定
setUndecorated(真);
//サイズを設定
たsetSize(新しい 次元(250, 250));
//ポリゴンのプロパティを設定します。
ポリゴンポリゴン= 新しい ポリゴン();
polygon.addPoint(0, 100);
polygon.addPoint(50, 0);
polygon.addPoint(100, 100);
//形状の値を設定
=をnewCircle Ellipse2D.Double 新しい Ellipse2D.Double(0, 50, 1.0*100, 1.0*100);
//一般的なパスのプロパティを設定
GeneralPathをgpath = 新しい GeneralPathを();
gpath.append(ポリゴン, 真);
gpath.append(newCircle, 真);
//パスを設定
setShape(gpath);
//ボックスのレイアウトを設定する
getContentPane().ます。setLayout(新しい BoxLayout(getContentPane(), BoxLayout.X_AXIS));
加える(ボックス.createHorizontalGlue());
//ラベルとセットのプロパティを作成
JLabel newlabel = 新しい JLabelの(“Javaの型ウィンドウ”);
newlabel.setForeground(色.白);
加える(newlabel);
加える(ボックス.createHorizontalGlue());
//コンテンツ·ペインの背景色を設定する
getContentPane().setBackground(色.シアン);
//場所を設定します
setLocationRelativeTo(ゼロ);
setVisible(真);
}
公共 静的 ボイド メイン(文字列[] argsに) {
ユースベンチャーのGraphicsEnvironment =のGraphicsEnvironment.getLocalGraphicsEnvironment();
//このプロパティのOSのサポートを確認してください
場合 (genv.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT)) {
システム.外に.のprintln(“OSは、透光性をサポートしています”);
新しい JavaShapedWindow();
}
}
}
また、透明感と形の窓のように2つの機能を組み合わせて実装することができます. これを実装するには, あなたのフレームにsetOpacityメソッドを呼び出す. 結果ウィンドウには、結合された効果が表示されます. しかし、我々は、基礎となるオペレーティング·システムは、ピクセルレベルでの透明感とピクセルレベルの透明度をサポートしている必要があります忘れてはならない.
結論:
この記事では、java7.The透明感で、いくつかの新機能をカバーしていると形の窓の機能は本当に面白いとJava UIコンポーネントをより柔軟に. しかし同時に私たちは、基礎となるオペレーティング·システムがすべてのこれらのプロパティをサポートしている必要があることを覚えておく必要があります. そうしないと効果が表示されません. したがって、アプリケーション自体に我々は、OSのサポートを確認してからエフェクトを実装. ジャワの最新の機能は、開発者がUI側で効果の異なるタイプを作成することができ. 我々はすべてのことを見て知っていると感じ、どのようなUIベースのアプリケーションの重要な側面である. だから、開発者は現在、UIがより快適かつ魅力的にするためのツールが装備されている.