Java 在单行SWT文本小部件中设置选项卡大小

Java 在单行SWT文本小部件中设置选项卡大小,java,swt,eclipse-rcp,Java,Swt,Eclipse Rcp,我正在为EclipseRCP应用程序编写一个视图,并试图在文本输入字段中设置选项卡的显示大小。文本小部件声明为: Text txtInput; txtInput = new Text(inputHolder, SWT.SINGLE); 尝试使用txtInput.setTabs(4)设置tabsize(4个空格,而不是默认的8个空格)什么也不做,通过查找文本小部件,有一行代码可以防止更改单行小部件的tabsize void setTabStops (int tabs) { if ((st

我正在为EclipseRCP应用程序编写一个视图,并试图在文本输入字段中设置选项卡的显示大小。文本小部件声明为:

Text txtInput;
txtInput = new Text(inputHolder, SWT.SINGLE);
尝试使用
txtInput.setTabs(4)设置tabsize(4个空格,而不是默认的8个空格)
什么也不做,通过查找
文本
小部件,有一行代码可以防止更改单行小部件的tabsize

void setTabStops (int tabs) {
    if ((style & SWT.SINGLE) != 0) return; 
    //rest of code to change tabStopsize
}
我已尝试将
Text
小部件设置为具有
SWT.MULTI
样式,tabsize会按预期更改,但我不想要多行输入

限制单线输入的原因是什么?有没有办法解决


感谢

如评论中所述,使用
文本
SWT.SINGLE
不可能做到这一点

但是,您只需使用
样式文本即可:)


很好用。单行和制表键支持。

您甚至如何在文本输入字段中键入制表符?按下输入字段上的Tab按钮不应该直接进入下一个输入元素吗?如果您使用
addTraverseListener
并将其设置为Not traverse(使用
e.doit=false;
for TraverseEvent e),则不应该这样做。关于这一点,有一个非常古老的Eclipse错误,它说“制表符在单行文本中无效”。@Trengot我明白了。但在我看来,这仍然是一个可用性问题。我想说,如果您有一个单行输入,用户会希望选项卡将他带到下一个控件。也许这就是为什么他们决定忽略单行输入的制表符大小设置的原因。@greg-449谢谢链接。看起来奇怪的是,它在v2.1rc2(如前所述)中工作,但在3.8中不工作。谢谢,这会工作,除非我们将文本小部件传递给其他函数,这些函数都需要文本小部件。可能不需要太多麻烦就可以改变它们,但我不确定。我得调查一下。
public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout(1, false));

    StyledText text = new StyledText(shell, SWT.SINGLE | SWT.BORDER);
    text.addListener(SWT.Traverse, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            e.doit = false;
        }
    });
    text.setTabs(4);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}