[英]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.