5.2.3 半透明窗口

除了任意形状的窗口之外,Java 7支持的另外一个窗口特殊效果是窗口的半透明化。窗口的半透明化也是很多桌面应用会采用的做法。这种做法既可以带来不错的视觉效果,又可以在特定的情况下帮助用户更好地使用窗口。比如,当用户在一个文档编辑器的当前文档中进行查找的时候,可以把查找窗口设成半透明的。这样用户可以同时看到文档中的内容和查找窗口,方便进行比对和再次查找。与设置窗口形状类似的是,Window类中有一组方法用来获取和设置窗口的透明度,分别是getOpacity和setOpacity。透明度的区间是0到1,0表示完全透明,而1则表示完全不透明。

实现半透明窗口要求底层操作系统支持为窗口中包含的像素设置透明度值,还要求窗口不包含装饰元素以及不能处于最大化的状态。后两点要求与设置窗口形状时一样。而第一点要求的差别在于,设置窗口形状时只要求支持每个像素的透明度值能够被设置为0或1即可,而设置半透明窗口时要求每个像素的透明度值都能够被设置为0到1区间内的任意值。代码清单5-2给出了半透明窗口的一个示例。在示例中,创建了一个Swing的滑动条组件。当滑动条的值发生变化的时候,整个窗口的透明度也会发生改变。

代码清单5-2 半透明窗口的示例


public void createTranslucentWindow(){

final Frame frame=new Frame();

frame.setUndecorated(true);

frame.setSize(400,300);

final JSlider slider=new JSlider(0,100,80);

slider.addChangeListener(new ChangeListener(){

public void stateChanged(ChangeEvent e){

frame.setOpacity(slider.getValue()/100.0f);

}

});

frame.add(slider);

frame.setOpacity(0.8f);

frame.setVisible(true);

}