gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:35:51 26 4
gpt4 key购买 nike

当消息显示在表项中时,我需要更改表项的文本。那么我们如何使用 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;
}
}

看起来像这样:

enter image description here

关于java - 我们如何使用 jface 更改 swt 中表格行的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25599641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com