--- /dev/null
+/*\r
+ * クリップボード操作用Action\r
+ *\r
+ * Copyright(c) 2008 olyutorskii\r
+ * $Id: ClipboardAction.java 888 2009-11-04 06:23:35Z olyutorskii $\r
+ */\r
+\r
+package jp.sourceforge.jindolf;\r
+\r
+import java.awt.Toolkit;\r
+import java.awt.datatransfer.Clipboard;\r
+import java.awt.datatransfer.StringSelection;\r
+import java.awt.event.ActionEvent;\r
+import javax.swing.Action;\r
+import javax.swing.text.JTextComponent;\r
+import javax.swing.text.TextAction;\r
+\r
+/**\r
+ * テキストコンポーネント-クリップボード間操作用にカスタム化したAction。\r
+ */\r
+@SuppressWarnings("serial")\r
+public class ClipboardAction extends TextAction{\r
+\r
+ /** アクション{@value}。 */\r
+ public static final String ACTION_CUT = "ACTION_CUT";\r
+ /** アクション{@value}。 */\r
+ public static final String ACTION_COPY = "ACTION_COPY";\r
+ /** アクション{@value}。 */\r
+ public static final String ACTION_PASTE = "ACTION_PASTE";\r
+ /** アクション{@value}。 */\r
+ public static final String ACTION_SELALL = "ACTION_SELALL";\r
+\r
+ /**\r
+ * 文字列をクリップボードにコピーする。\r
+ * @param data 文字列\r
+ */\r
+ public static void copyToClipboard(CharSequence data){\r
+ Toolkit toolkit = Toolkit.getDefaultToolkit();\r
+ Clipboard clipboard = toolkit.getSystemClipboard();\r
+ StringSelection selection = new StringSelection(data.toString());\r
+ clipboard.setContents(selection, selection);\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * カット用Actionの生成。\r
+ * @return カット用Action\r
+ */\r
+ public static ClipboardAction cutAction(){\r
+ return new ClipboardAction("選択範囲をカット", ACTION_CUT);\r
+ }\r
+\r
+ /**\r
+ * コピー用Actionの生成。\r
+ * @return コピー用Action\r
+ */\r
+ public static ClipboardAction copyAction(){\r
+ return new ClipboardAction("選択範囲をコピー", ACTION_COPY);\r
+ }\r
+\r
+ /**\r
+ * ペースト用Actionの生成。\r
+ * @return ペースト用Action\r
+ */\r
+ public static ClipboardAction pasteAction(){\r
+ return new ClipboardAction("ペースト", ACTION_PASTE);\r
+ }\r
+\r
+ /**\r
+ * 全選択用Actionの生成。\r
+ * @return 全選択用Action\r
+ */\r
+ public static ClipboardAction selectallAction(){\r
+ return new ClipboardAction("すべて選択", ACTION_SELALL);\r
+ }\r
+\r
+ /**\r
+ * コンストラクタ。\r
+ * @param name ポップアップメニュー名\r
+ * @param command アクションコマンド名\r
+ */\r
+ protected ClipboardAction(String name, String command){\r
+ super(name);\r
+ setActionCommand(command);\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * アクションコマンド名を設定する。\r
+ * @param actionCommand アクションコマンド名\r
+ */\r
+ private void setActionCommand(String actionCommand){\r
+ putValue(Action.ACTION_COMMAND_KEY, actionCommand);\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * アクションコマンド名を取得する。\r
+ * @return アクションコマンド名\r
+ */\r
+ protected String getActionCommand(){\r
+ Object value = getValue(Action.ACTION_COMMAND_KEY);\r
+ if( ! (value instanceof String) ) return null;\r
+\r
+ String command = (String) value;\r
+\r
+ return command;\r
+ }\r
+\r
+ /**\r
+ * {@inheritDoc}\r
+ * アクションの受信によってクリップボード操作を行う。\r
+ * @param event {@inheritDoc}\r
+ */\r
+ public void actionPerformed(ActionEvent event){\r
+ JTextComponent textComp = getTextComponent(event);\r
+ if(textComp == null) return;\r
+\r
+ String command = getActionCommand();\r
+\r
+ if (ACTION_CUT .equals(command)) textComp.cut();\r
+ else if(ACTION_COPY .equals(command)) textComp.copy();\r
+ else if(ACTION_PASTE .equals(command)) textComp.paste();\r
+ else if(ACTION_SELALL.equals(command)) textComp.selectAll();\r
+\r
+ return;\r
+ }\r
+\r
+ // TODO 文字列以外の物をペーストしたときに無視したい。\r
+}\r