Swing/CopyOnSelect のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CopyOnSelect へ行く。
- 1 (2015-07-06 (月) 01:50:58)
- 2 (2015-12-28 (月) 16:08:59)
- 3 (2016-11-15 (火) 18:39:48)
- 4 (2017-08-28 (月) 14:18:58)
- 5 (2018-02-24 (土) 19:51:30)
- 6 (2018-09-11 (火) 14:38:32)
- 7 (2020-09-01 (火) 14:49:02)
- 8 (2022-03-08 (火) 19:35:49)
- 9 (2024-10-31 (木) 14:04:30)
- 10 (2025-01-03 (金) 08:57:02)
- 11 (2025-01-03 (金) 09:01:23)
- 12 (2025-01-03 (金) 09:02:38)
- 13 (2025-01-03 (金) 09:03:21)
- 14 (2025-01-03 (金) 09:04:02)
- category: swing
folder: CopyOnSelect
title: JTextArea内の文字列がマウス操作で選択されたら自動的にコピーする
tags: [CaretListener, JTextComponent, JTextArea, MouseListener]
author: aterai
pubdate: 2015-07-06T01:50:14+09:00
description: JTextArea内の文字列がマウス操作で選択された場合のイベントを取得するMouseListenerとCaretListenerを設定し、その選択文字列を自動的にクリップボードにコピーする機能を追加します。
image:
hreflang:
href: http://java-swing-tips.blogspot.com/2015/12/copy-on-select-for-jtextarea.html lang: en
概要
JTextArea
内の文字列がマウス操作で選択された場合のイベントを取得するMouseListener
とCaretListener
を設定し、その選択文字列を自動的にクリップボードにコピーする機能を追加します。
Screenshot

Advertisement
サンプルコード
class CopyOnSelectListener extends MouseAdapter implements CaretListener {
private boolean dragActive;
private int dot;
private int mark;
@Override public final void caretUpdate(CaretEvent e) {
if (!dragActive) {
fire(e.getSource());
}
}
@Override public final void mousePressed(MouseEvent e) {
dragActive = true;
}
@Override public final void mouseReleased(MouseEvent e) {
dragActive = false;
fire(e.getSource());
}
private void fire(Object c) {
if (c instanceof JTextComponent) {
JTextComponent tc = (JTextComponent) c;
Caret caret = tc.getCaret();
int d = caret.getDot();
int m = caret.getMark();
if (d != m && (dot != d || mark != m)) {
String str = tc.getSelectedText();
if (Objects.nonNull(str)) {
//StringSelection data = new StringSelection(str);
//Toolkit tk = Toolkit.getDefaultToolkit();
//tk.getSystemClipboard().setContents(data, data);
tc.copy();
}
}
dot = d;
mark = m;
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、マウス操作を使って文字列を選択する場合のみ、選択文字列を自動的にクリップボードにコピーするリスナーをJTextArea
に設定しています。
- マウスカーソルのドラッグで文字列選択した場合は、選択終了後にクリップボードにその文字列をコピーする
- Shift+カーソルキーによる文字列選択は無視する
- Shift+マウスクリックによる文字列選択は、選択終了後にクリップボードにその文字列をコピーする
- マウスのダブルクリックによる文字列選択は、クリップボードにその操作で選択された文字列をコピーする