SwingでCut,Copy&Paste
エディタ関連のアプリケーションには必ず付いている、「編集(E)」メニューのカット・コピー・ペースト機能をSwingで実現する方法。Ctrl+Xなどの処理は、わざわざ実装しなくてもデフォルトで動作します。ただ、メニューから実行する場合はどうするのか知りませんでした。
バージョンごとのサポート状況によって挙動が変わるかも知れませんが、単純な実装だとこうすると良さそうです。
JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("Edit"); menu.setMnemonic('E'); menuBar.add(menu); // CUT JMenuItem mCut = new JMenuItem("Cut", 'T'); mCut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK)); mCut.addActionListener(new DefaultEditorKit.CutAction()); menu.add(mCut); // COPY JMenuItem mCopy = new JMenuItem("Copy", 'C'); mCopy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK)); mCopy.addActionListener(new DefaultEditorKit.CopyAction()); menu.add(mCopy); // PASTE JMenuItem mPaste = new JMenuItem("Paste", 'P'); mPaste.setAccelerator(KeyStroke.getKeyStroke('P', InputEvent.CTRL_MASK)); mPaste.addActionListener(new DefaultEditorKit.PasteAction()); menu.add(mPaste); JFrame frame = new JFrame(); frame.setJMenuBar(menuBar); frame.setSize(200, 180); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JScrollPane scrollPane = new JScrollPane(new JTextArea()); frame.getContentPane().add(scrollPane, BorderLayout.CENTER); frame.setVisible(true);
実行はJava5.0にて。
DefaultEditorKitのinner-classが、ショートカットキーによる操作と同じアクションになります。コンテキストメニューも実装すればさらにエディタっぽくなるかな?