第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

JTextArea - 雙擊/三次單擊 + 移動(dòng)鼠標(biāo)的選擇行為

JTextArea - 雙擊/三次單擊 + 移動(dòng)鼠標(biāo)的選擇行為

尚方寶劍之說(shuō) 2024-01-28 17:08:19
問(wèn)題:當(dāng)您雙擊 JTextArea 中的單詞時(shí),它會(huì)被標(biāo)記,但是當(dāng)您不釋放鼠標(biāo)按鈕并嘗試標(biāo)記下一個(gè)單詞時(shí),它不會(huì)標(biāo)記整個(gè)單詞,而是標(biāo)記單個(gè)字符。移動(dòng)鼠標(biāo)(雙擊)時(shí),它應(yīng)該標(biāo)記整個(gè)單詞(而不是單個(gè)字符)。這實(shí)際上是我嘗試過(guò)的所有程序的默認(rèn)行為,例如:記事本、Firefox、Chrome、Word,甚至 Netbeans 等。與三次單擊相同(當(dāng)按住并移動(dòng)鼠標(biāo)時(shí)應(yīng)標(biāo)記下一行,而不是字符)。有任何想法嗎?我很難用谷歌搜索這個(gè)問(wèn)題,但由于這是一個(gè)很常見(jiàn)的事情,我相信一定有一個(gè)簡(jiǎn)單的選擇,或者至少有人已經(jīng)有了解決方案。示例代碼:public class TestJTextArea {    public static void main(final String[] args)    {        final JPanel panel = new JPanel(new BorderLayout());        panel.setPreferredSize(new Dimension(500, 500));        panel.add(new JTextArea(), BorderLayout.CENTER);        final JFrame frame = new JFrame("Test");        frame.getContentPane().add(panel, BorderLayout.CENTER);        frame.pack();        frame.setResizable(false);        frame.setLocationRelativeTo(null);        frame.setVisible(true);    }}
查看完整描述

1 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

也許您需要?jiǎng)?chuàng)建一個(gè)自定義的Caret,例如:


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.text.*;


public class TestJTextArea2 {

  public Component makeUI() {

    String text = "The quick brown fox jumps over the lazy dog.";

    JTextArea textArea1 = new JTextArea("default\n" + text);

    JTextArea textArea2 = new JTextArea("setCaret\n" + text) {

      @Override public void updateUI() {

        setCaret(null);

        super.updateUI();

        Caret oldCaret = getCaret();

        int blinkRate = oldCaret.getBlinkRate();

        Caret caret = new SelectWordCaret();

        caret.setBlinkRate(blinkRate);

        setCaret(caret);

      }

    };

    JPanel p = new JPanel(new GridLayout(2, 1));

    p.add(new JScrollPane(textArea1));

    p.add(new JScrollPane(textArea2));

    return p;

  }


  public static void main(String[] args) {

    EventQueue.invokeLater(() -> {

      JFrame f = new JFrame();

      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

      f.getContentPane().add(new TestJTextArea2().makeUI());

      f.setSize(320, 240);

      f.setLocationRelativeTo(null);

      f.setVisible(true);

    });

  }

}


class SelectWordCaret extends DefaultCaret {

  private boolean wordSelectingMode = false;

  private int p0; // = Math.min(getDot(), getMark());

  private int p1; // = Math.max(getDot(), getMark());


  @Override public void mousePressed(MouseEvent e) {

    super.mousePressed(e);

    int nclicks = e.getClickCount();

    if (SwingUtilities.isLeftMouseButton(e) && !e.isConsumed() && nclicks == 2) {

      p0 = Math.min(getDot(), getMark());

      p1 = Math.max(getDot(), getMark());

      wordSelectingMode = true;

    } else {

      wordSelectingMode = false;

    }

  }


  @Override public void mouseDragged(MouseEvent e) {

    if (wordSelectingMode && !e.isConsumed() && SwingUtilities.isLeftMouseButton(e)) {

      continuouslySelectWords(e);

    } else {

      super.mouseDragged(e);

    }

  }


  private void continuouslySelectWords(MouseEvent e) {

    Position.Bias[] biasRet = new Position.Bias[1];

    JTextComponent c = getComponent();

    int pos = c.getUI().viewToModel2D(c, e.getPoint(), biasRet);

    if(biasRet[0] == null) {

      biasRet[0] = Position.Bias.Forward;

    }

    try {

      if (p0 <= pos && pos <= p1) {

        setDot(p0);

        moveDot(p1, biasRet[0]);

      } else if (p1 < pos) {

        setDot(p0);

        moveDot(Utilities.getWordEnd(c, pos - 1), biasRet[0]);

      } else if (p0 > pos) {

        setDot(p1);

        moveDot(Utilities.getWordStart(c, pos), biasRet[0]);

      }

    } catch (BadLocationException bl) {

      UIManager.getLookAndFeel().provideErrorFeedback(c);

    }

  }

}


查看完整回答
反對(duì) 回復(fù) 2024-01-28
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)