如何仅使用新文本替换SWT中的选定文本

时间:2013-04-28 17:46:44

标签: java swt

我有一个SWT Text小部件。我在小部件中有文字说例如“B for Bat”并且我选择(通过鼠标和键盘)它的一部分即“Bat”并通过按钮触发事件,其中我有我的代码替换为“Ball” 。所以我的最终输出是“B for Ball”。

我如何实现这一目标。请帮帮我

1 个答案:

答案 0 :(得分:2)

这将解决您的问题:

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

    final Text text = new Text(shell, SWT.BORDER);

    Button button = new Button(shell, SWT.PUSH);
    button.setText("Replace");
    button.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            String content = text.getText();
            Point selection = text.getSelection();

            /* Get the first non-selected part, add "Ball" and get the second non-selected part */
            content = content.substring(0, selection.x) + "Ball" + content.substring(selection.y, content.length());

            text.setText(content);
        }
    });

    shell.pack();
    shell.setSize(400,shell.getSize().y);
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

关键部分是使用Text#getSelection(),它将返回Pointx坐标是选择的开头,y坐标是选择的结束

您可能想要为空选择添加检查。


顺便说一句:请随时发布你自己尝试过的内容......