System選択文字列のマウス中央ボタンクリックによるペーストを無効化
Total: 294, Today: 1, 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内の文字列がマウス操作で選択されたら自動的にコピーする