Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Windows 7中的SWT JFace TableViewer选择_Java_User Interface_Swt_Jface_Tableviewer - Fatal编程技术网

Java Windows 7中的SWT JFace TableViewer选择

Java Windows 7中的SWT JFace TableViewer选择,java,user-interface,swt,jface,tableviewer,Java,User Interface,Swt,Jface,Tableviewer,我正在使用swtjfaceTableViewer组件来显示数据列表。我已经实现了IColorProvider,以提供自定义的前景色和背景色。在大多数情况下,我提供带有浅色背景的黑色前景文本。但是,在某些情况下,我使用深色背景和白色前景文本。这会在Windows 7中导致选择颜色为淡蓝色的问题 Windows 7上发生的情况是,当我的表格(行选择)中的一个深色项目被选中时,背景颜色为淡蓝色选择颜色。但是,前景色仍为白色,您无法看到它(请参阅下面的图1) 首先,我是不是做错了什么 其次,我尝试了以

我正在使用swtjface
TableViewer
组件来显示数据列表。我已经实现了
IColorProvider
,以提供自定义的前景色和背景色。在大多数情况下,我提供带有浅色背景的黑色前景文本。但是,在某些情况下,我使用深色背景和白色前景文本。这会在Windows 7中导致选择颜色为淡蓝色的问题

Windows 7上发生的情况是,当我的表格(行选择)中的一个深色项目被选中时,背景颜色为淡蓝色选择颜色。但是,前景色仍为白色,您无法看到它(请参阅下面的图1)

  • 首先,我是不是做错了什么

  • 其次,我尝试了以下方法来解决这个问题(关于热点事件绘画有什么想法?):

  • 当我重新运行我的测试应用程序时,我得到以下信息。选定的行现在已修复,但“悬停”的表行仍然存在问题,如图2所示。我试图在橡皮擦项目处理程序中捕获SWT.HOT事件,但它似乎没有任何作用

    我确实有幸添加了PaintItem事件处理程序(如下所示),但我必须在代码中放置关于单元格对齐的相同逻辑,以便正确渲染。此外,“我的绘制”事件在正确渲染选定的Windows 7颜色修复程序上激发和绘制

    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);
        }
    });