package logbook.gui.listener; import org.apache.commons.lang3.StringUtils; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; /** * テーブルをクリップボードにコピーするアダプターです * */ public final class TableToClipboardAdapter extends SelectionAdapter { /** テーブルヘッダー */ private final String[] header; /** テーブル */ private final Table table; /** * コンストラクター * * @param header ヘッダー * @param table テーブル */ public TableToClipboardAdapter(String[] header, Table table) { this.header = header; this.table = table; } @Override public void widgetSelected(SelectionEvent arg) { copyTable(this.header, this.table); } /** * テーブルの選択されている部分をヘッダー付きでクリップボードにコピーします * * @param header ヘッダー * @param table テーブル */ public static void copyTable(String[] header, Table table) { TableItem[] tableItems = table.getSelection(); StringBuilder sb = new StringBuilder(); sb.append(StringUtils.join(header, "\t")); sb.append("\r\n"); for (TableItem column : tableItems) { String[] columns = new String[header.length]; for (int i = 0; i < header.length; i++) { columns[i] = column.getText(i); } sb.append(StringUtils.join(columns, "\t")); sb.append("\r\n"); } Clipboard clipboard = new Clipboard(Display.getDefault()); clipboard.setContents(new Object[] { sb.toString() }, new Transfer[] { TextTransfer.getInstance() }); } }