概觀: 在這篇文章中,我們將討論有關在Java中的透明度和不同形狀的窗. 在java 7 擺動支持此功能,並且擺動的UI組件更加靈活和用戶友好.
介紹: 在一些應用中, 透明窗口的要求,以支持其功能. 現在在Java, 可以實現透明度. 通過實施一個JFrame組件名為setOpacity的方法創建一個半透明的窗口,通過改變其不透明度. 但我們必須明白,一個半透明的窗口是唯一可能的,如果底層操作系統支持. 此外,我們還需要確保窗口不飾. 為了使窗口未修飾, 需要調用了setUndecorated的 (真) 方法. 過了一段時間,它也需要一個窗口UI改變形狀. 為了實現它, 我們需要調用方法setShape,內componentResized方法. 它會重新計算調整窗口的大小時的形狀.
返回地面: 在Java UI, 支持半透明和形窗口是一個漫長的時間需求的Swing / AWT組件. 對於本地開發訪問這些屬性都可以從很長一段時間回來. 但它是不能訪問到核心Java組件. 的Java6起, 支持半透明,形窗口. 即使每個像素級半透明也是Java7支持.
支持半透明和透明的類型: 爪哇 7 支持以下三種類型的支持.
TRANSLUCENT: 在此功能中,窗口可以有不同的顏色,但具有相同的不透明度級別. 因此,alpha值是相同的所有像素. 這種效果是適合褪色關閉一個窗口,然後逐漸減小,增加的alpha值.
PERPIXEL_TRANSLUCENT: 此屬性窗口內本身支持不同的α值. 這是用來褪色的窗口中的選定的區域.
PERPIXEL_TRANSPARENT: 此屬性支持不同形狀的窗口,而不是傳統的矩形. 如果每個像素的透明度的支持,那麼不同的形狀,如圈, 可以創建三角形.
在我們使用任何上述物業,我們需要測試的支持下躺在操作系統. 經測試可以通過使用方法屬於java.awt.GraphicsDevice類isWindowTranslucencySupported. 它採用類型的透明膠片作為輸入,並返回true / false,以表示支持.
讓我們檢查的樣本代碼來實現的半透明功能. 在這個例子中,我們已經創建了一個長方形的半透明窗口的文本區域. 首先,我們已經禁用的裝修模式,以獲得透明的效果. 然後我們檢查,如果底層操作系統的支持與否. 如果支持的效果是可見的框架窗口.
清單1: 樣品顯示半透明的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(顏色.青色);
加(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(真);
}
公眾 靜止 無效 主(串[] 參數) {
//創建圖形環境
青年創業的GraphicsEnvironment =圖形環境
.getLocalGraphicsEnvironment();
//如果操作系統支持 半透明
如果 (genv.getDefaultScreenDevice().isWindowTranslucencySupported(
GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {
System.out.println(“OS支持半透明”);
新 TransRecFrame();
}
}
}
支持半透明和形狀特點: Java7主要有三種功能,可用來支持半透明和形狀的一個窗口.
- 全窗口半透明: 在這種方法中完整的窗口是半透明.
- 每像素半透明: 在這種方法中的一部分的窗口是半透明的
- 異型窗: 不同形狀的窗戶像卵形, 圈, 矩形等。.
每像素半透明:
我們已經看到了如何做一個完整的窗口半透明在前面的例子. 現在我們將討論的第二部分,一組半透明的像素,通過使用他們的背景顏色. 實現此方案有一定的局限性. 窗口不應該是全屏幕和系統必須支持像素級半透明. 該過程的其餘部分類似於上面的例子中.
在下面的例子中,我們將看到如何設置在一幀像素級半透明.
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));
//徵集的像素設置
為(詮釋 I = 0; 我 < 16; 我 ){
加(新 像素面板(255 – 我 * 12));
}
//設置背景和其他屬性
的setBackground(新 顏色(0, 0, 0, 0));
setLocationRelativeTo(零);
其setVisible(真);
}
公眾 靜止 無效 主(串[] 參數) {
青年創業的GraphicsEnvironment =圖形環境.getLocalGraphicsEnvironment();
//檢查窗口支持 半透明
如果 (genv.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)) {
系統.出.調用println(“OS支持半透明”);
新 PixelTranslucency();
}
} 私人 類 像素面板 擴展 JPanel中 {
私人 像素面板(詮釋 PIXL) {
非常();
的setBackground(新 顏色(0, 0, 255, PIXL));
}
}
}
異型窗:
現在我們將討論的另一個重要的功能支持由Java7.The形窗口,支持所有類型的形狀,無論是用戶的要求,. 此功能可幫助您創建任何形狀像圓, 三角形, 多邊形或任何可能的形狀複雜. 窗口類的方法可用於設置屬性setShape. 但是,我們再次要記住,不應該被允許全屏模式和操作系統支持半透明.
下面的例子演示了如何使用形窗口.
Listing3: 形窗口顯示使用的示例代碼.
進口 javax.swing.*;
進口 * java.awt中。;
進口 java.awt.geom.Ellipse2D;
進口 java.awt.geom.GeneralPath;
公眾 類 JavaShapedWindow 擴展 JFrame的 {
公眾 JavaShapedWindow() {
非常(“設置形狀的窗口”);
//設置未修飾的關得到一個效果
了setUndecorated(真);
//設置尺寸
用setSize(新 尺寸(250, 250));
//設置多邊形屬性
多邊形多邊形= 新 多邊形();
polygon.addPoint(0, 100);
polygon.addPoint(50, 0);
polygon.addPoint(100, 100);
//設置的形狀的值
Ellipse2D.Double newCircle = 新 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(真);
}
公眾 靜止 無效 主(串[] 參數) {
青年創業的GraphicsEnvironment =圖形環境.getLocalGraphicsEnvironment();
//檢查操作系統支持此屬性
如果 (genv.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT)) {
系統.出.調用println(“OS支持半透明”);
新 JavaShapedWindow();
}
}
}
我們還可以實現兩種功能的組合,如半透明狀窗口. 要實現這一點, 你的框架致電setOpacity方法. 結果窗口會顯示的綜合效應. 但是,我們應該記住底層操作系統必須支持像素級半透明像素級別的透明度.
結論:
在這篇文章中,我們已經覆蓋了一些新的特點在java7.The半透明,形窗口功能真的很有趣,使Java UI組件更加靈活. 但同時,我們必須記住,底層操作系統應該支持所有這些屬性. 否則效果將是不可見. 因此,我們在應用程序本身檢查的操作系統支持,然後實施效果. 在UI方面,最新的java功能,使開發人員能夠創建不同類型的效果. 正如我們都知道的外觀和感覺,任何基於UI的應用程序是一個重要方面. 因此,開發人員現在配備工具,使用戶界面更加愉快和有吸引力.