System選択文字列のマウス中央ボタンクリックによるペーストを無効化
Total: 15
, Today: 15
, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
System
選択文字列のマウス中央ボタンクリックによるペーストが有効な環境でこれを無効化するCaret
をJTextComponent
に設定します。
Screenshot

Advertisement
Source Code Examples
class DisableMiddleClickPasteCaret extends DefaultCaret {
@Override public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isMiddleMouseButton(e)) {
e.consume();
}
super.mouseClicked(e);
}
}
View in GitHub: Java, KotlinDescription
- Toolkit#getSystemSelection()が
Clipboard
を返すToolkit
を使用する環境では、システム全体での文字列選択をマウス中央ボタンクリックによるペースト可能になるようDefaultCaret#mouseClicked(...)
で実装されているWindows
環境のToolkit
ではToolkit#getSystemSelection()
は常にnull
なので、マウス中央ボタンクリックによるペーストは不可- このため
Linux
環境でもToolkit#getSystemSelection()
をオーバーライドしてnull
を返すよう変更すればマウス中央ボタンクリックによるペーストを無効化できそうだが、Toolkit
の入れ替えが難しい?
DefaultCaret#mouseClicked(...)
をオーバーライドし、マウス中央ボタンSwingUtilities.isMiddleMouseButton(...)
の場合はイベントを消費して処理されないよう設定したCaret
を作成- この
Caret
を設定したJTextComponent
ではシステム選択文字列のマウス中央ボタンクリックによるペースが不可になる
- この
Reference
- linux - How can I disable middle-click paste in a Java Swing application? - Stack Overflow
Toolkit
にAWTEventListener
を追加してアプリケーション全体でマウス中央ボタンクリックによるペースを不可にするサンプル
- Toolkit#getSystemSelection() (Java Platform SE 8)
- Toolkit#getSystemClipboard() (Java Platform SE 8)で取得可能なシステム
Clipboard
とは異なり、Toolkit#getSystemSelection()
はシステム選択の単独インスタンスをClipboard
オブジェクトとして取得する
- Toolkit#getSystemClipboard() (Java Platform SE 8)で取得可能なシステム
- JTextAreaのCaretを変更してマウスのダブルクリックによる単語選択の動作を変更する
- JTextArea内の文字列がマウス操作で選択されたら自動的にコピーする