Java SWT TableColumn标头行为需要自定义,但是如何?

时间:2018-11-29 18:52:07

标签: java swt tablecolumn

我想在表列标题中显示图像。我的问题是,对列进行排序后,图像消失了。我正在Windows 10专业版中工作。我正在使用以下版本的eclipse: 用于RCP和RAP开发人员的Eclipse

版本:Oxygen.3a释放(4.7.3a) 版本号:20180405-1200

我很难找到实现自定义绘制表格栏标题的示例,该标题允许将图像与排序图标一起显示。

理想情况下,我希望将图像显示在列的右侧而不是左侧。

我不能继承TableColumn的子类,也不知道该怎么办。

任何帮助将不胜感激。

import java.text.Collator;
import java.util.Locale;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

public class RobinTest2 {

    public static void main(String[] args) {
         Display display = new Display();
         Shell shell = new Shell(display);
         shell.setLayout(new FillLayout());
         final Table table = new Table(shell, SWT.BORDER);
         table.setHeaderVisible(true);
         final TableColumn column1 = new TableColumn(table, SWT.NONE);
         column1.setText("Column 1");
         final Image image = display.getSystemImage(SWT.ICON_QUESTION);
         column1.setImage(image);
         final TableColumn column2 = new TableColumn(table, SWT.NONE);
         column2.setImage(image);
         column2.setText("Column 2");
         TableItem item = new TableItem(table, SWT.NONE);
         item.setText(new String[] { "a", "3" });
         item = new TableItem(table, SWT.NONE);
         item.setText(new String[] { "b", "2" });
         item = new TableItem(table, SWT.NONE);
         item.setText(new String[] { "c", "1" });
         column1.setWidth(100);
         column2.setWidth(100);
         Listener sortListener = e -> {
            TableItem[] items = table.getItems();
            Collator collator = Collator.getInstance(Locale.getDefault());
            TableColumn column = (TableColumn) e.widget;
            int index = column == column1 ? 0 : 1;
            for (int i = 1; i < items.length; i++) {
                String value1 = items[i].getText(index);
                for (int j = 0; j < i; j++) {
                    String value2 = items[j].getText(index);
                    if (collator.compare(value1, value2) < 0) {
                        String[] values = { items[i].getText(0), items[i].getText(1) };
                        items[i].dispose();
                        TableItem item1 = new TableItem(table, SWT.NONE, j);
                        item1.setText(values);
                        items = table.getItems();
                        break;
                    }
                }
             }
             table.setSortColumn(column);
         };
        column1.addListener(SWT.Selection, sortListener);
        column2.addListener(SWT.Selection, sortListener);
        table.setSortColumn(column1);
        table.setSortDirection(SWT.UP);
        shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
            display.sleep();
        }
        display.dispose();
    }

}

0 个答案:

没有答案