• category: swing folder: DisableMiddleMouseClickPaste title: System選択文字列のマウス中央ボタンクリックによるペーストを無効化 tags: [JTextComponent, DefaultCaret, Clipboard, Toolkit] author: aterai pubdate: 2025-07-21T08:13:57+09:00 description: System選択文字列のマウス中央ボタンクリックによるペーストが有効な環境でこれを無効化するCaretをJTextComponentに設定します。 image: https://drive.google.com/uc?id=1Q7Yns8J0DDRy91jBg_-FTSsJeV7Xip06

Summary

System選択文字列のマウス中央ボタンクリックによるペーストが有効な環境でこれを無効化するCaretをJTextComponentに設定します。

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, Kotlin

Description

  • Toolkit#getSystemSelection()Clipboardを返すToolkitを使用する環境では、システム全体での文字列選択をマウス中央ボタンクリックによるペースト可能になるようDefaultCaret#mouseClicked(...)で実装されている
    • Windows環境のToolkitではToolkit#getSystemSelection()は常にnullなので、マウス中央ボタンクリックによるペーストは不可
    • このためLinux環境でもToolkit#getSystemSelection()をオーバーライドしてnullを返すよう変更すればマウス中央ボタンクリックによるペーストを無効化できそうだが、Toolkitの入れ替えが難しい?
  • DefaultCaret#mouseClicked(...)をオーバーライドし、マウス中央ボタンSwingUtilities.isMiddleMouseButton(...)の場合はイベントを消費して処理されないよう設定したCaretを作成
    • このCaretを設定したJTextComponentではシステム選択文字列のマウス中央ボタンクリックによるペースが不可になる

Reference

Comment