2014-09-01 63 views
0

當需要在tableitem中顯示消息時,需要更改表格項目的文本。我們如何使用jface來完成此操作。該表格由2個coloumns組成。請幫助解決這個問題,因爲我是jface的新手。如何使用jface在swt中更改表格行的文本

+0

你的意思是用「文字」和「什麼消息「?你正在使用'Table'還是'TableViewer'? – Baz 2014-09-01 06:15:48

+0

我正在使用一個table.Here文本和消息是相同的,這意味着任何文本。如果您使用tableviewer,因爲它使用jface更好,那麼更好 – user3824589 2014-09-01 06:21:21

+0

所以你想使用表或tableviewer?並請詳細解釋你想達到的目標。我仍然不明白你在問什麼。 – Baz 2014-09-01 06:25:47

回答

1

好的,這裏是一個非常基本的例子。你必須處理的顏色String代表性和實際Color之間的映射S自己:

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

是這樣的:

enter image description here