Java Windows 7中的SWT JFace TableViewer选择
我正在使用swtjfaceJava Windows 7中的SWT JFace TableViewer选择,java,user-interface,swt,jface,tableviewer,Java,User Interface,Swt,Jface,Tableviewer,我正在使用swtjfaceTableViewer组件来显示数据列表。我已经实现了IColorProvider,以提供自定义的前景色和背景色。在大多数情况下,我提供带有浅色背景的黑色前景文本。但是,在某些情况下,我使用深色背景和白色前景文本。这会在Windows 7中导致选择颜色为淡蓝色的问题 Windows 7上发生的情况是,当我的表格(行选择)中的一个深色项目被选中时,背景颜色为淡蓝色选择颜色。但是,前景色仍为白色,您无法看到它(请参阅下面的图1) 首先,我是不是做错了什么 其次,我尝试了以
TableViewer
组件来显示数据列表。我已经实现了IColorProvider
,以提供自定义的前景色和背景色。在大多数情况下,我提供带有浅色背景的黑色前景文本。但是,在某些情况下,我使用深色背景和白色前景文本。这会在Windows 7中导致选择颜色为淡蓝色的问题
Windows 7上发生的情况是,当我的表格(行选择)中的一个深色项目被选中时,背景颜色为淡蓝色选择颜色。但是,前景色仍为白色,您无法看到它(请参阅下面的图1)
table.addListener(SWT.PaintItem, new Listener() {
public void handleEvent(Event event) {
boolean hot = (event.detail & SWT.HOT) == 0;
if (hot) System.out.println("HOT!");
if ((event.detail & SWT.HOT & ~SWT.SELECTED) == 0)
return;
event.detail &= ~SWT.HOT;
final int TEXT_MARGIN = 3;
GC gc = event.gc;
gc.setForeground(ColourHelper.BLACK);
gc.setBackground(ColourHelper.BLACK);
TableItem item = (TableItem) event.item;
item.setBackground(ColourHelper.BLACK);
item.setForeground(ColourHelper.BLACK);
String text = item.getText(event.index);
int yOffset = 0;
if (event.index == 1) {
Point size = event.gc.textExtent(text);
yOffset = Math.max(0, (event.height - size.y) / 2);
}
event.gc.drawText(text, event.x + TEXT_MARGIN, event.y + yOffset, true);
}
});
总之,也许我在IColourProvider
上做错了什么,就这么简单?或者,表
或表查看器
组件中存在错误。我已通过下载RCP 3.6.1升级到最新版本,但我有相同的症状
非常感谢您的帮助:-)
table.addListener(SWT.PaintItem, new Listener() {
public void handleEvent(Event event) {
boolean hot = (event.detail & SWT.HOT) == 0;
if (hot) System.out.println("HOT!");
if ((event.detail & SWT.HOT & ~SWT.SELECTED) == 0)
return;
event.detail &= ~SWT.HOT;
final int TEXT_MARGIN = 3;
GC gc = event.gc;
gc.setForeground(ColourHelper.BLACK);
gc.setBackground(ColourHelper.BLACK);
TableItem item = (TableItem) event.item;
item.setBackground(ColourHelper.BLACK);
item.setForeground(ColourHelper.BLACK);
String text = item.getText(event.index);
int yOffset = 0;
if (event.index == 1) {
Point size = event.gc.textExtent(text);
yOffset = Math.max(0, (event.height - size.y) / 2);
}
event.gc.drawText(text, event.x + TEXT_MARGIN, event.y + yOffset, true);
}
});