Eclipse RCP TableViewer组件没有显示TAB字符?

时间:2012-05-07 07:42:04

标签: java swt eclipse-rcp

我试图在Cell of TableViewer组件中显示一些内容。除了tab(\ t)字符外,它几乎显示每个字符。看起来它忽略了\ t字符。任何人都知道对此有任何解决方法吗?

对于此问题的解决方法,我尝试用少量空格字符替换\ t,它看起来像Tab字符的行为。但我不知道为什么'\ t'没有在TableViewer中正确显示。

任何建议表示赞赏。 感谢。

2 个答案:

答案 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();
}
}