Eclipse SWT:如何从 getStyle() 中取消屏蔽样式组合
Eclipse SWT: How to unmask style combination from getStyle()
这适用于标准 Eclipse SWT(在 RCP 中)。假设我有一个 shell
Shell shell = new Shell(parent);
我可以从方法 shell.getStyle() 中获取样式值。假设它是 33555696。那么我怎样才能得到这个值的实际样式组合呢?即,如何检索原始样式定义 SWT.CLOSE | SWT.TITLE ...?
我从这个博客得到了一些帮助 http://blog.vogella.com/2011/01/25/swt-style-bits/ 它告诉我如何检查特定样式,但我仍然不知道如何获得组合。谢谢
按位或值不是 EnumSet
。它本身不包含样式常量。它只包含常量的值,结合按位或。
此外,多个样式常量具有相同的值。不同的常量适用于不同的上下文。例如,值 1<<4
用于样式常量 SWT.RADIO
、SWT.SHADOW_ETCHED_IN
、SWT.RESIZE
、SWT.NO_SCROLL
、SWT.PHONETIC
和 SWT.ICON_WORKING
.
对于特定的上下文,您可以逐个测试其合法样式常量。由此,您可以生成产生该值的代码。
SWTSpy 工具是您的好帮手,它会告诉您文字中的样式位是什么,请参阅下面的演示和安装说明。
但是,对于您的特定问题,您可能需要将样式位转换为字符串的 SWTSpy 源。 @AndyThomas 是正确的,对于每种类型的控件,样式位可能具有不同的含义。这就是为什么 SWTSpy 有一个巨大的 if/else 链来为您解决它。
这是一个示例:
if ((style & 1 << 3) != 0) {
if (w instanceof Menu) {
result += "POP_UP | ";
} else if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem) {
result += "PUSH | ";
} else if (w instanceof Combo || w instanceof Text || w instanceof StyledText) {
result += "READ_ONLY | ";
} else if (w instanceof Label || w instanceof Group || w instanceof ToolBar) {
result += "SHADOW_OUT | ";
} else if (w instanceof Decorations) {
result += "NO_TRIM | ";
} else {
result += "POP_UP or PUSH or READ_ONLY or SHADOW_OUT or NO_TRIM or NATIVE | ";
}
}
如果需要,您可以将 that code 合并到您的代码中。
使用 SWT 间谍
安装 SWT Spy 后(见下文):
- 打开视图 (
Window
-> Show View
-> Other
-> SWT Spy
)
- 开启间谍 Ctrl+Alt+Shift+ . 或按视图顶部的按钮。
- 将鼠标悬停在感兴趣的控件上
- 检查其所有属性,包括样式位
- 为了 "freeze" 间谍停止跟踪鼠标,按 Ctrl+Alt+再次 Shift+..
这是一个屏幕截图,显示突出显示的添加按钮具有样式:PUSH | FLAT | CENTER | LEFT_TO_RIGHT | DOUBLE_BUFFERED
安装
如何安装 SWTSpy(SWT 工具的一部分):
- 从
Help
-> Install New Software
- 选择
The Eclipse Project Updates
- 在筛选框中键入
swt tools
(如下面的屏幕截图所示)
- 完成向导
这适用于标准 Eclipse SWT(在 RCP 中)。假设我有一个 shell
Shell shell = new Shell(parent);
我可以从方法 shell.getStyle() 中获取样式值。假设它是 33555696。那么我怎样才能得到这个值的实际样式组合呢?即,如何检索原始样式定义 SWT.CLOSE | SWT.TITLE ...?
我从这个博客得到了一些帮助 http://blog.vogella.com/2011/01/25/swt-style-bits/ 它告诉我如何检查特定样式,但我仍然不知道如何获得组合。谢谢
按位或值不是 EnumSet
。它本身不包含样式常量。它只包含常量的值,结合按位或。
此外,多个样式常量具有相同的值。不同的常量适用于不同的上下文。例如,值 1<<4
用于样式常量 SWT.RADIO
、SWT.SHADOW_ETCHED_IN
、SWT.RESIZE
、SWT.NO_SCROLL
、SWT.PHONETIC
和 SWT.ICON_WORKING
.
对于特定的上下文,您可以逐个测试其合法样式常量。由此,您可以生成产生该值的代码。
SWTSpy 工具是您的好帮手,它会告诉您文字中的样式位是什么,请参阅下面的演示和安装说明。
但是,对于您的特定问题,您可能需要将样式位转换为字符串的 SWTSpy 源。 @AndyThomas 是正确的,对于每种类型的控件,样式位可能具有不同的含义。这就是为什么 SWTSpy 有一个巨大的 if/else 链来为您解决它。
这是一个示例:
if ((style & 1 << 3) != 0) {
if (w instanceof Menu) {
result += "POP_UP | ";
} else if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem) {
result += "PUSH | ";
} else if (w instanceof Combo || w instanceof Text || w instanceof StyledText) {
result += "READ_ONLY | ";
} else if (w instanceof Label || w instanceof Group || w instanceof ToolBar) {
result += "SHADOW_OUT | ";
} else if (w instanceof Decorations) {
result += "NO_TRIM | ";
} else {
result += "POP_UP or PUSH or READ_ONLY or SHADOW_OUT or NO_TRIM or NATIVE | ";
}
}
如果需要,您可以将 that code 合并到您的代码中。
使用 SWT 间谍
安装 SWT Spy 后(见下文):
- 打开视图 (
Window
->Show View
->Other
->SWT Spy
) - 开启间谍 Ctrl+Alt+Shift+ . 或按视图顶部的按钮。
- 将鼠标悬停在感兴趣的控件上
- 检查其所有属性,包括样式位
- 为了 "freeze" 间谍停止跟踪鼠标,按 Ctrl+Alt+再次 Shift+..
这是一个屏幕截图,显示突出显示的添加按钮具有样式:PUSH | FLAT | CENTER | LEFT_TO_RIGHT | DOUBLE_BUFFERED
安装
如何安装 SWTSpy(SWT 工具的一部分):
- 从
Help
->Install New Software
- 选择
The Eclipse Project Updates
- 在筛选框中键入
swt tools
(如下面的屏幕截图所示) - 完成向导