2011-12-08 101 views
1

我有SWT文本部件,它使用SWT.SINGLE樣式 無法將MS-Excel列粘貼到SWT的文本部件中

Text myTextControl = new Text(shell, SWT.SINGLE); 

現在,當我嘗試從MS-Excel複製列時,只有該選定列的第一個被粘貼到文本窗口小部件而不是整個列。
我明白,當我用SWT.MULTI創建Text小部件時,我可以將整個excel列粘貼到小部件中,但它不會在單行中。

此前,我使用的是Swings JTextField,在那種情況下,無論何時我使用粘貼MS-Excel列(使用CTRL-V),整個excel列都被粘貼爲JTextField中的一行。
我正在尋找SWT文本部件的相同功能。

回答

2

問題在於,在選定列中的每個單元格後,Excel會放入新行字符。然後識別粘貼文本的末尾並修剪它。

此代碼得到粘貼事件並全部更換新行字符選定一個

import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.RowLayout; 
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.Text; 

public class PasteModify { 

    private final String lineReplaceString = ", "; 

    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setLayout(new RowLayout(SWT.VERTICAL)); 

     Text tfPaste = new Text(shell, SWT.BORDER); 
     tfPaste.setText("paste excel column here"); 
     tfPaste.addListener(SWT.Verify, new Listener() { 

      @Override 
      public void handleEvent(Event event) { 
       event.text = event.text.replace("\n", PasteModify.this.lineReplaceString); 
      } 
     }); 
     shell.setBounds(50, 50, 300, 200); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
}