Java SWT可编辑组合-突出显示文本

Java SWT可编辑组合-突出显示文本,java,swt,Java,Swt,我有一个可编辑的SWT组合。用户可以从下拉列表中选择项目或输入新文本。我的代码还进行了一些数据验证,如果输入的文本无效,我想强制将焦点放在组合框上,并突出显示输入的文本 我的问题是:有没有办法突出显示组合中输入的所有文本?不幸的是,我认为没有“selectText”方法 提前谢谢 我尝试了Baz的建议,但由于一些未知的原因,代码在单独的测试项目中工作时,相同的代码在我的程序中不工作: comboViewerRes = new ComboViewer(this, SWT.DROP_DOWN

我有一个可编辑的SWT组合。用户可以从下拉列表中选择项目或输入新文本。我的代码还进行了一些数据验证,如果输入的文本无效,我想强制将焦点放在组合框上,并突出显示输入的文本

我的问题是:有没有办法突出显示组合中输入的所有文本?不幸的是,我认为没有“selectText”方法

提前谢谢

我尝试了Baz的建议,但由于一些未知的原因,代码在单独的测试项目中工作时,相同的代码在我的程序中不工作:

    comboViewerRes = new ComboViewer(this, SWT.DROP_DOWN);
    comboRes = comboViewerRes.getCombo();
    comboRes.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false,
            1, 1));

    comboRes.addListener(SWT.KeyUp, new Listener() {
        @Override
        public void handleEvent(Event e) {
            if (e.keyCode == SWT.SPACE) {
                Rectangle bounds = comboRes.getBounds();
                Point point = new Point(bounds.x, bounds.x + bounds.width);
                System.out.println(point);
                comboRes.setSelection(point);
            }
        }
    });

好的,没有直观的方法可以做到这一点,但是,
Combo
包含一个名为
setSelection(Point)
的方法。此方法的javadoc声明:

将接收器文本字段中的选择设置为参数指定的范围,该参数的x坐标是选择的起点,y坐标是选择的终点

为了选择所有内容,您需要创建一个
,将其
x
值设置为
组合的左边缘
,将
y
坐标设置为
组合的右边缘

下面是一个代码示例:

public static void main(String[] args)
{
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    shell.setText("ExpandBar Example");

    final ComboViewer viewer = new ComboViewer(shell, SWT.DROP_DOWN);

    viewer.getCombo().addListener(SWT.KeyUp, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            if(e.keyCode == SWT.SPACE)
            {
                Rectangle bounds = viewer.getCombo().getBounds();
                Point point = new Point(bounds.x, bounds.x + bounds.width);
                viewer.getCombo().setSelection(point);
            }
        }
    });

    viewer.setContentProvider(ArrayContentProvider.getInstance());
    viewer.setLabelProvider(new LabelProvider()
    {
        @Override
        public String getText(Object element)
        {
            if (element instanceof String)
            {
                return element.toString();
            }
            return super.getText(element);
        }
    });

    String[] persons = new String[] { "this", "is", "a", "test" };

    viewer.setInput(persons);

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

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}
你可以正常打字。按空格键后,代码将选择到目前为止输入的所有内容

以下是一些屏幕截图:


事实上,我发现,
combo.setSelection()
应该以文本字符串的起始索引作为第一个参数,第二个参数作为结束索引,即选择文本中的前两个字符do,
combo.setSelection(新点(0,2))
并选择所有文本do
combo.setSelection(新点(0,combo.getText().length())

为什么它适用于Baz而不适用于user3229864,可能是因为Baz的combo位于坐标0上,而user3229864则不在坐标0上


希望这有帮助

发布您尝试使用的代码。有人会纠正它,并回答:代码本身运行良好。但是,相同的代码在使用ComboViewer的我的代码中不起作用。我尝试了
Combo-Combo=comboViewer.getCombo()combo.setSelection
行实际上已经运行(我放置了一个
System.out.println(bounds);
来确认。我不确定为什么它在我的程序中不起作用。这可能是ComboViewer的“功能”吗?@user3229864好吧,您在问题中没有指定您使用的是
ComboViewer
而不是
Combo
。我会调查一下。@user3229864更新了代码。它现在使用的是
ComboViewer
。同样的代码仍然可以正常工作。这很奇怪。您的代码可以正常工作,但当我将代码复制到程序中时,它没有ef效果。
边界
似乎设置正确,但
设置选择
方法似乎没有做任何事情。@user3229864您能检查组合的样式位是否相同吗?