概观: 在这篇文章中,我们将讨论有关在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的应用程序是一个重要方面. 因此,开发人员现在配备工具,使用户界面更加愉快和有吸引力.