簡體   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