public class BeautyEyeLNFHelper
extends java.lang.Object
BeautyEye Swing外观实现方案 - L&F核心辅助类.
项目托管地址:https://github.com/JackJiang2011/beautyeye
限定符和类型 | 类和说明 |
---|---|
static interface |
BeautyEyeLNFHelper.__UseParentPaintSurported
开发者暂时无需关注此接口.
|
static class |
BeautyEyeLNFHelper.FrameBorderStyle
BeautyEye LNF 的窗口边框样式.
|
限定符和类型 | 字段和说明 |
---|---|
static java.awt.Color |
activeCaptionTextColor
颜色全局变量:正常情况下的窗口文本颜色.
|
static java.awt.Color |
commonBackgroundColor
颜色全局变量:多数组件的背景色.
|
static java.awt.Color |
commonDisabledForegroundColor
颜色全局变量:某些组件被禁用时的文本颜色.
|
static java.awt.Color |
commonFocusedBorderColor
颜色全局变量:某些组件的焦点边框颜色.
|
static java.awt.Color |
commonForegroundColor
颜色全局变量:多数组件的前景色(文本颜色).
|
static java.awt.Color |
commonSelectionBackgroundColor
颜色全局变量:多数组件中文本被选中时的背景色.当前主要用于各文本组件等.
|
static java.awt.Color |
commonSelectionForegroundColor
颜色全局变量:多数组件中文本被选中时的前景色(文本颜色).当前主要用于各文本组件、菜单项等.
|
static boolean |
debug
开关量:用于开启/关闭BeautyEye LNF的调试信息输出.
|
static BeautyEyeLNFHelper.FrameBorderStyle |
frameBorderStyle
BeautyEye LNF 的窗口边框样式.
|
static boolean |
setMaximizedBoundForFrame
开关量:用于默认设置或不设置窗口(Frame及其子类)的设置此窗体的最大化边界.
|
static boolean |
translucencyAtFrameInactive
开关量:用于开启/关闭当窗口(包括JFrame、JDialog)处于非活动
状态(inactivity)时的半透明视觉效果.
|
构造器和说明 |
---|
BeautyEyeLNFHelper() |
限定符和类型 | 方法和说明 |
---|---|
static javax.swing.border.Border |
__getFrameBorder()
开发者无需关注本方法.
|
static boolean |
__isFrameBorderOpaque()
开发者无需关注本方法.
|
static javax.swing.LookAndFeel |
getBeautyEyeLNFCrossPlatform()
Gets the beauty eye lnf cross platform.
|
static java.lang.String |
getBeautyEyeLNFStrCrossPlatform()
Gets the beauty eye lnf str cross platform.
|
static java.lang.String |
getBeautyEyeLNFStrWindowsPlatform()
Gets the beauty eye lnf str windows platform.
|
static javax.swing.LookAndFeel |
getBeautyEyeLNFWindowsPlatform()
Gets the beauty eye lnf windows platform.
|
protected static void |
implLNF()
BeautyEye LNF的外观实现核心方法.
|
static boolean |
isSurportedTranslucency()
当前运行的Java版本是否支持窗口透明、每像素半透明.
|
static void |
launchBeautyEyeLNF()
实施BeautyEye外观.
|
public static boolean debug
默认false,即不开启调试信息输出.
public static boolean translucencyAtFrameInactive
默认true,即表示默认开启半透明效果.
public static BeautyEyeLNFHelper.FrameBorderStyle frameBorderStyle
默认值:运行在java1.6.0_u10及以上版本时使用 BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike
,
运行在java1.5版本时使用BeautyEyeLNFHelper.FrameBorderStyle.generalNoTranslucencyShadow
.
注意:如需设置本参数,请确保它在UIManager.setLookAndFeel前被设置,否则将不会起效哦.
public static java.awt.Color activeCaptionTextColor
你可设置本变量,也可直接通过UIManager.put("activeCaptionText",new ColorUIResource(c))
和
UIManager.put("inactiveCaptionText",new ColorUIResource(c))
来实现窗口文本颜色的改变.
窗体不活动(inactivite)时的颜色将据此自动计算出来,无需额外设置. 默认是黑色(new Color(0,0,0)).
public static java.awt.Color commonBackgroundColor
你可设置本变量,也可直接通过各自的UIManager属性来改变它们.
默认是浅灰色(new Color(250,250,250)).
public static java.awt.Color commonForegroundColor
你可设置本变量,也可直接通过各自的UIManager属性来改变它们.
默认是深灰色(new Color(60,60,60)).
public static java.awt.Color commonFocusedBorderColor
你可设置本变量,也可直接通过各自的UIManager属性来改变它们.
默认是浅灰色(new Color(250,250,250)).
public static java.awt.Color commonDisabledForegroundColor
你可设置本变量,也可直接通过各自的UIManager属性来改变它们.
默认是浅灰色(new Color(172,168,153)).
public static java.awt.Color commonSelectionBackgroundColor
你可设置本变量,也可直接通过各自的UIManager属性来改变它们.
默认是深灰色(new Color(2,129,216)).
public static java.awt.Color commonSelectionForegroundColor
你可设置本变量,也可直接通过各自的UIManager属性来改变它们.
默认是深灰色(new Color(255,255,255)).
public static boolean setMaximizedBoundForFrame
此开关量是它是为了解决这样一个问题 :
当不使用操作系统的窗口装饰(即使用完全自定义的窗口标题、边框)时,在windows上最
大化窗口时将会全屏显示从而覆盖了下方的任务栏(task bar),这个问题 据说自2002年
就已存在,SUN一直未解决或者根本不认为是bug。目前的解决方案是当本变量是true时则
默认为每一个窗体设置最大化边界,否则保持系统默认。不过这样设置并非完美方案:一旦
设置了最大边界,则此后无论Task Bar再怎么调 整大小,比如被hide了,则窗体永远是设
置时的最大边界,不过目前也只能这么折中解决了,因为窗体最大化事件处理并非L&F中实现
,暂未找到其它更好的方法。
默认true,即表示默认开启此设置.
Frame.setMaximizedBounds(java.awt.Rectangle)
protected static void implLNF()
本方法可以直接从外部调用,这意味着BeautyEye LNF的外观核心实现无需特定于LookAndFeel的实例.
也就是说任意外观都可应用本方法所作的外观实现(并保证跨平台),以使之可灵活应用.
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl()
,
__UI__.uiImpl_win()
public static java.lang.String getBeautyEyeLNFStrCrossPlatform()
public static java.lang.String getBeautyEyeLNFStrWindowsPlatform()
public static javax.swing.LookAndFeel getBeautyEyeLNFCrossPlatform()
new BeautyEyeLookAndFeelCross()
public static javax.swing.LookAndFeel getBeautyEyeLNFWindowsPlatform()
new BeautyEyeLookAndFeelWin()
public static void launchBeautyEyeLNF() throws java.lang.Exception
本方法会据操作系统类型不同,来决定主类是使用BeautyEyeLookAndFeelWin还是BeautyEyeLookAndFeelWin. 使用BeautyEye外观时推荐使用本方法来设置外观.之所以有平台不同主类不同的区分,是为了 在Windows上平台上能更好的使用与操作系统相同的字体等设置.
java.lang.Exception
- UIManager.setLookAndFeel(String)
过程中出现的任何异常getBeautyEyeLNFStrWindowsPlatform()
,
getBeautyEyeLNFStrCrossPlatform()
,
Platform
public static boolean isSurportedTranslucency()
必须java1.6.0_u12及以后版本才支持(为什么要到u12才支持? 因u10、u11里的窗口透明存在BUG 6750920).
public static boolean __isFrameBorderOpaque()
true表示当前正在使用的窗口边框是不透明的,否则表示透明. 本方法目前作为BERootPaneUI中设置窗口是否透明的开关使用.
#### 官方API中存的Bug: ####
在jdk1.6.0_u33下+win7平台下(其它版本是否也有这情况尚未完全验证),JFrame窗口
被设置成透明后,该窗口内所有文本都会被反走样(不管你有没有要求反走样),真悲具。
这应该是官方AWTUtilities.setWindowOpaque(..)bug导致的,1.7.0_u6同样存在该问题,
使用BeautyEye时,遇到这样的问题只能自行使用本方法中指定的不透明边框才行(这样
BERootPaneUI类的设置窗口透明的代码就不用执行,也就不用触发该bug了),但JDialog
不受此bug影响,诡异!
public static javax.swing.border.Border __getFrameBorder()
根据设置的frameBorderStyle来返回正确的窗口边框.
FrameBorderStyle#defaultLookAndFeelDecorated
时返回无意义的BorderFactory.createEmptyBorder(),否则返回指定边框对象