1

通常、テキストコンポーネントをダブルクリックすると、単語全体が選択されます。

この1つの単語の選択を無効にしたいのですが、クリックしてドラッグして選択する機能は維持します。

例:「速い茶色のキツネが怠惰な犬を飛び越える」

「The」の先頭から「dog」の末尾までクリックしてドラッグすると、テキストが選択されます。ただし、「茶色」をダブルクリックすると、「茶色」が選択されず、別のアクションを実行できます。

誰かが私がこれを達成する方法を知っていますか?

4

5 に答える 5

2

自分で登録するか、のクリック数(つまり)を確認できるMouseListenerMouseAdapter思いgetClickCount()ますMouseEvent。と等しい場合はイベント2飲み込み、そうでない場合はイベント処理をスーパークラスに委任します(例super.mouseClicked(...))。

于 2012-02-28T17:23:53.067 に答える
2

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);
于 2012-02-29T06:05:26.897 に答える
1

これを行う別の方法は、selectWordアクションを何もしないアクションに置き換えることです。

    textComponent.getActionMap().put(DefaultEditorKit.selectWordAction, 
            new TextAction(DefaultEditorKit.selectWordAction) {
                public void actionPerformed(ActionEvent e) {
                    // DO NOTHING
                }
            });

単語の定義がデフォルトのSwingの定義と異なる場合は、この手法を使用してselectWordアクションの動作を変更することもできます。

于 2014-10-31T17:32:57.100 に答える
0

次のようにダブルクリックを実装できます。

setCaretPosition(0);

ドキュメントselect(int,int):これは、へのデリゲート呼び出しである非推奨メソッドを指しsetCaretPosition、その後moveCaretPosition

于 2012-02-28T17:26:21.230 に答える
0

@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
            }
        }
    });
于 2017-08-17T14:36:00.640 に答える