2013-04-28 82 views
0

我有一个SWT文本小部件。我在窗口小部件里面有文本,比如说“B for Bat”,我选择了它的一部分(通过鼠标和键盘),即“蝙蝠”并通过按钮触发事件,其中我的代码用“球” 。所以我最终的输出是“B for Ball”。如何用新文本替换仅SWT中的选定文本

我该如何做到这一点。请帮我

回答

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坐标的结束选择。

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


BTW:请随时张贴的内容你已经尝试自己...

+0

感谢的快速反应。 getSelection()至关重要 – kk331317 2013-04-28 18:14:36

+0

@ kk331317不客气。 – Baz 2013-04-28 18:16:32