我有使用SWT.SINGLE
样式创建的SWT Text小部件
例如
Text myTextControl = new Text(shell, SWT.SINGLE);
现在,当我尝试从MS-Excel复制列时,只有该选定列的第一个被粘贴到文本小部件中,而不是整个列。
我确实理解当我使用Text
创建SWT.MULTI
小部件时,我可以将整个excel列粘贴到小部件中,但它不会在单行中。
以前,我使用的是Swings JTextField
,在这种情况下,每当我粘贴MS-Excel列(使用CTRL-V)时,整个excel列都会被粘贴为JTextField
中的一行。<登记/>
我正在为SWT Text小部件寻找相同类型的功能。
答案 0 :(得分:2)
问题在于Excel在所选列中的每个单元格之后放置的新行字符。 Text.SINGLE
然后识别粘贴文本中的行尾并修剪它。
此代码获取粘贴事件并替换所选的所有新行字符
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();
}
}