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