通常、テキストコンポーネントをダブルクリックすると、単語全体が選択されます。
この1つの単語の選択を無効にしたいのですが、クリックしてドラッグして選択する機能は維持します。
例:「速い茶色のキツネが怠惰な犬を飛び越える」
「The」の先頭から「dog」の末尾までクリックしてドラッグすると、テキストが選択されます。ただし、「茶色」をダブルクリックすると、「茶色」が選択されず、別のアクションを実行できます。
誰かが私がこれを達成する方法を知っていますか?
通常、テキストコンポーネントをダブルクリックすると、単語全体が選択されます。
この1つの単語の選択を無効にしたいのですが、クリックしてドラッグして選択する機能は維持します。
例:「速い茶色のキツネが怠惰な犬を飛び越える」
「The」の先頭から「dog」の末尾までクリックしてドラッグすると、テキストが選択されます。ただし、「茶色」をダブルクリックすると、「茶色」が選択されず、別のアクションを実行できます。
誰かが私がこれを達成する方法を知っていますか?
自分で登録するか、のクリック数(つまり)を確認できるMouseListener
とMouseAdapter
思いgetClickCount()
ますMouseEvent
。と等しい場合はイベント2
を飲み込み、そうでない場合はイベント処理をスーパークラスに委任します(例super.mouseClicked(...)
)。
editはJTextComponentインスタンスです
DefaultCaret c=new DefaultCaret() {
public void mouseClicked(MouseEvent e) {
int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
if (! e.isConsumed() &&
SwingUtilities.isLeftMouseButton(e) &&
nclicks == 2
&& SwingUtilities2.canEventAccessSystemClipboard(e)) {
return;
}
super.mouseClicked(e);
}
public void mousePressed(MouseEvent e) {
int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
if (! e.isConsumed() &&
SwingUtilities.isLeftMouseButton(e) &&
nclicks == 2
&& SwingUtilities2.canEventAccessSystemClipboard(e)) {
return;
}
super.mousePressed(e);
}
};
c.setBlinkRate(edit.getCaret().getBlinkRate());
edit.setCaret(c);
これを行う別の方法は、selectWordアクションを何もしないアクションに置き換えることです。
textComponent.getActionMap().put(DefaultEditorKit.selectWordAction,
new TextAction(DefaultEditorKit.selectWordAction) {
public void actionPerformed(ActionEvent e) {
// DO NOTHING
}
});
単語の定義がデフォルトのSwingの定義と異なる場合は、この手法を使用してselectWordアクションの動作を変更することもできます。
次のようにダブルクリックを実装できます。
setCaretPosition(0);
ドキュメントselect(int,int)
:これは、へのデリゲート呼び出しである非推奨メソッドを指しsetCaretPosition
、その後moveCaretPosition
@Loicあなたの答えは私のために働いた。ただし、特定の条件が満たされた場合は、単語選択を有効にしたかったのです。これが私がそれをした方法です:
Action defaultSelectWordAction = textComponent.getActionMap().get(DefaultEditorKit.selectWordAction);
textComponent.getActionMap().put(DefaultEditorKit.selectWordAction, new TextAction(DefaultEditorKit.selectWordAction) {
@Override
public void actionPerformed(ActionEvent e) {
if (conditionFulfilled()) {
defaultSelectWordAction.actionPerformed(e);
} else {
// DO NOTHING
}
}
});