繁体   English   中英

我们如何使用jface在swt中更改表行的文本

[英]How can we change text of a table row in swt using jface

当消息显示在tableitem中时,我需要更改表项的文本。因此,如何使用jface进行处理。该表由2个列组成。请帮助解决此问题,因为我是jface的新手。

好的,这是一个非常基本的示例。 您必须自己处理颜色的String表示形式和实际的Color之间的映射:

private static Map<String, Integer> COLOR_MAPPING = new HashMap<>();

static
{
    COLOR_MAPPING.put("red", SWT.COLOR_RED);
    COLOR_MAPPING.put("blue", SWT.COLOR_BLUE);
}

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout(1, false));

    TableViewer viewer = new TableViewer(shell, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);

    createColumns(viewer);

    final Table table = viewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    List<MyObject> data = new ArrayList<>();
    data.add(new MyObject("Something", "red"));
    data.add(new MyObject("Something else", "blue"));
    data.add(new MyObject("Something else entirely", "bleen"));

    viewer.setContentProvider(ArrayContentProvider.getInstance());
    viewer.setInput(data);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}

private static void createColumns(TableViewer viewer)
{
    TableViewerColumn first = new TableViewerColumn(viewer, SWT.NONE);
    first.getColumn().setWidth(200);
    first.getColumn().setText("First");
    first.setLabelProvider(new ColumnLabelProvider()
    {
        @Override
        public void update(ViewerCell cell)
        {
            Object element = cell.getElement();
            if(element instanceof MyObject)
            {
                MyObject obj = (MyObject) element;
                cell.setText(obj.getFirst());
            }
        }
    });

    TableViewerColumn second = new TableViewerColumn(viewer, SWT.NONE);
    second.getColumn().setWidth(200);
    second.getColumn().setText("Second");
    second.setLabelProvider(new ColumnLabelProvider()
    {
        @Override
        public void update(ViewerCell cell)
        {
            Object element = cell.getElement();
            if(element instanceof MyObject)
            {
                MyObject obj = (MyObject) element;

                cell.setText(obj.getSecond());

                Integer colorCode = COLOR_MAPPING.get(obj.getSecond());

                if(colorCode != null)
                        cell.setForeground(Display.getDefault().getSystemColor(colorCode));
            }
        }
    });
}

private static class MyObject
{
    private String first;
    private String second;

    public MyObject(String first, String second)
    {
        this.first = first;
        this.second = second;
    }

    public String getFirst()
    {
        return first;
    }

    public void setFirst(String first)
    {
        this.first = first;
    }

    public String getSecond()
    {
        return second;
    }

    public void setSecond(String second)
    {
        this.second = second;
    }
}

看起来像这样:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM