SWT多行表变得模糊

问题描述

我有一个带有多行表的SWT程序,我是通过code意识到的,我是在网上用SWT.MeasureItem和SWT.PaintItem / EraseItem侦听器找到的。

到目前为止,代码工作正常,我得到了multine表。 我还需要对表进行排序,这是我使用比较器完成的。

但是现在出现了一个新问题,当我对列进行排序时,重新绘制了表格,必须再次调用多行表格的代码。 Everythig可以正常工作,但是每次对列进行排序时,它都会变得越来越模糊。

由于我找不到将列标题作为多行显示的方法,因此我只是将它们放在第一列中,并将bg设置为灰色。 TableColumns之前已定义。

多行:

public void modifyTable(String[] header,ArrayList<String[]> dataArr,int[] laengen,int checkswitch) {
    Device device = Display.getCurrent();
    Color grey = new Color(device,220,220);
    dataArr.add(0,header);
    for (int zeile = 0; zeile < dataArr.size(); zeile++) {

        TableItem item = new TableItem(table,SWT.NONE);

        for (int i2 = 0; i2 < header.length; i2++) {
            item.setText(i2,dataArr.get(zeile)[i2]);
            item.setFont(SWTResourceManager.getFont("Arial",10,SWT.NORMAL));
            }
            if (zeile == 0) {
                item.setBackground(grey);
            }
        }

    }

    int TEXT_MARGIN = 2;
    table.addListener(SWT.MeasureItem,new Listener() {

        public void handleEvent(Event event) {

            TableItem item = (TableItem) event.item;
            String text = item.getText(event.index);
            Point size = event.gc.textExtent(text);
            event.width = size.x + 2 * TEXT_MARGIN;
            event.height = Math.max(event.height,size.y + TEXT_MARGIN);

        }
    });
    table.addListener(SWT.EraseItem,new Listener() {
        public void handleEvent(Event event) {
            event.detail &= ~SWT.FOREGROUND;
        }
    });
    table.addListener(SWT.PaintItem,new Listener() {
        public void handleEvent(Event event) {
            TableItem item = (TableItem) event.item;
            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);
            
        }
    });

    }
}

此代码可以正常工作。 如果单击“项目”,则该列将通过鼠标侦听器确定

table.addListener(SWT.MouseDown,new Listener() {
        public void handleEvent(Event event) {
            int clickedCloumn = 0;
            Point pt = new Point(event.x,event.y);
            TableItem item = tableGespDaten.getItem(pt);
            if (item != null) {
                for (int col = 0; col < tableGespDaten.getColumnCount(); 
       col++) {
                    Rectangle rect = item.getBounds(col);
                    if (rect.contains(pt)) {

                        clickedCloumn = col;

                    }
                }
            }
               

根据所单击的列,将调用比较器。 带有对象的ArrayList将被排序(这也很好用)。 再次调用Modifytable。

            table.removeAll();
            updateTable(arrList);

我的猜测是问题不是排序的一部分,而是一遍又一遍地重绘表格,但是由于我在不知道为什么之前就清除了它。

Before Blurr

After Blurr

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...