argius note

プログラミング関連

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が、ショートカットキーによる操作と同じアクションになります。コンテキストメニューも実装すればさらにエディタっぽくなるかな?