我试图在Cell of TableViewer组件中显示一些内容。除了tab(\ t)字符外,它几乎显示每个字符。看起来它忽略了\ t字符。任何人都知道对此有任何解决方法吗?
对于此问题的解决方法,我尝试用少量空格字符替换\ t,它看起来像Tab字符的行为。但我不知道为什么'\ t'没有在TableViewer中正确显示。
任何建议表示赞赏。 感谢。
答案 0 :(得分:1)
我认为\ t字符在SWT组件中呈现为0宽度,这就是为什么你没有看到它。你想用什么标签?通常,选项卡用于将文本与预定义的列起始点对齐 - 您是否可以使用单独的表列而不是制表符来实现相同的结果?或者,如果您需要缩进层次结构中的某些元素,是否要将TreeViewer与multiple columns一起使用。
为了显示文件的内容,StyledText组件可能更适合您的需要。这是Eclipse编辑器等使用的控件,非常灵活。
它支持制表符,你可以使用LineStyleListener来渲染表格,如行边框。有几个很好的教程可以帮助您入门:
Getting Your Feet Wet with the SWT StyledText Widget
Into the Deep End of the SWT StyledText Widget
如果您不想要编辑支持,那么您的使用将比这些教程中描述的内容简单得多。
答案 1 :(得分:1)
您可以使用文本布局并使用setTabs()以像素为单位设置选项卡的大小。以下是一个示例:
package de.abas.erp.wb.base.tools.identifiersearchview;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.TextLayout;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
public class TabSnippet {
public static void main(final String [] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Table:\t\t Change style \t multiple times in cell");
shell.setLayout(new FillLayout());
final Table table = new Table(shell, SWT.MULTI | SWT.FULL_SELECTION);
table.setLinesVisible(true);
for(int i = 0; i < 10; i++) {
new TableItem(table, SWT.NONE);
}
final TextLayout textLayout = new TextLayout(display);
textLayout.setText("SWT:\t Standard \t Widget \t Toolkit");
textLayout.setTabs(new int[] { 100 });
/*
* NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
* Therefore, it is critical for performance that these methods be as
* efficient as possible.
*/
table.addListener(SWT.PaintItem, new Listener() {
@Override
public void handleEvent(final Event event) {
textLayout.draw(event.gc, event.x, event.y);
}
});
final Rectangle textLayoutBounds = textLayout.getBounds();
table.addListener(SWT.MeasureItem, new Listener() {
@Override
public void handleEvent(final Event e) {
e.width = textLayoutBounds.width + 2;
e.height = textLayoutBounds.height + 2;
}
});
shell.setSize(400, 200);
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
textLayout.dispose();
display.dispose();
}
}