簡體   English   中英

在JTextArea中設置插入位置

[英]Setting caret position in JTextArea

我有一個JTextArea。 我有一個函數,在調用某個組合時選擇一些文本。 它做得很好。 問題是,我想在選擇一些文本並按下VK_LEFT時將插入符號移動到選擇位置。 KeyListener正確實現,我以其他方式測試它。 問題是,當我編寫以下代碼時:

@Override public void keyPressed( KeyEvent e) {
        if(e.getKeyChar()==KeyEvent.VK_LEFT)
            if(mainarea.getSelectedText()!=null)
                mainarea.setCaretPosition(mainarea.getSelectionStart());
    }

並將此偵聽器的實例添加到mainarea,選擇一些文本(使用我的函數)並按向左箭頭鍵,插入符號位置設置為選擇結束...而且我不會在開頭...什么是這件事? :S

這是一段代碼片段

    Action moveToSelectionStart = new AbstractAction("moveCaret") {

        @Override
        public void actionPerformed(ActionEvent e) {
            int selectionStart = textComponent.getSelectionStart();
            int selectionEnd = textComponent.getSelectionEnd();
            if (selectionStart != selectionEnd) {
                textComponent.setCaretPosition(selectionEnd);
                textComponent.moveCaretPosition(selectionStart);
            }
        }

        public boolean isEnabled() {
            return textComponent.getSelectedText() != null;
        }
    };
    Object actionMapKey = "caret-to-start";
    textComponent.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), actionMapKey);
    textComponent.getActionMap().put(actionMapKey, moveToSelectionStart);

注意:不建議重新定義通常安裝的鍵綁定,如任何箭頭鍵,用戶可能會非常煩惱;-)更好地尋找一些尚未綁定的鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM