我正在尝试在 TableViewer 组件的单元格中显示一些内容。它显示几乎所有字符,除了制表符 (\t) 字符。看起来它忽略了 \t 字符。任何人都知道任何解决这个问题?
为了解决这个问题,我尝试用几个空格字符替换 \t,它看起来像 Tab 字符的行为。但我不知道为什么 '\t' 没有在 TableViewer 中正确显示。
任何建议表示赞赏。谢谢。
我正在尝试在 TableViewer 组件的单元格中显示一些内容。它显示几乎所有字符,除了制表符 (\t) 字符。看起来它忽略了 \t 字符。任何人都知道任何解决这个问题?
为了解决这个问题,我尝试用几个空格字符替换 \t,它看起来像 Tab 字符的行为。但我不知道为什么 '\t' 没有在 TableViewer 中正确显示。
任何建议表示赞赏。谢谢。
我认为 \t 字符在 SWT 组件中呈现为 0 宽度,这就是您没有看到它的原因。你想用标签做什么?通常,制表符用于将文本与预定义的列起点对齐 - 您是否可以使用单独的表格列而不是制表符来实现相同的结果?或者,如果您需要缩进层次结构中的某些元素,您是否想要使用具有多个列的 TreeViewer 。
为了显示文件的内容,StyledText组件可能更适合您的需要。这是Eclipse编辑器等使用的控件,非常灵活。
它支持选项卡,您可以使用LineStyleListener来呈现表格,如行边框。有几个优秀的教程可以帮助您入门:
如果您不想要编辑支持,那么您的使用将比那些教程中描述的大部分内容简单得多。
您可以使用 Textlayout 并使用 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();
}
}