2013-06-29 4 views
5

Я выделил текст в JTextArea, но я не могу выбрать выделение вручную. Как я могу это сделать?не удалось выделить выделенный текст в jtextarea

jTextArea.getHighlighter().addHighlight(0,5); 
jTextArea.getHighlighter().removeHighlight(jTextArea.getSelectionStart(),jTextArea.getSelectionEnd()); 

Когда я пытаюсь удалить выделение, выбранный пользователем, начало и конец выбора в настоящее время показано, как один и тот же и, следовательно, выбранный текст (textArea.getSelectedText()) равна нулю.

Я хочу удалить выделение, выбранное пользователем.

Когда я выбираю его с помощью клавиатуры, он должен быть выбран. Имеет ли это? И еще одно: подсветка не должна удаляться при выборе текста.

Любое решение оценивается.

+3

Что SelectionStart и selectionEnd.? Как вы храните в нем значения? Было бы намного лучше, если бы вы поместили код, который мог бы быть выполнен. –

+1

Как вы определяете изменения выбора? – MadProgrammer

+1

'jTextAra.getSelectionEnd()' и 'jTextAra.getSeletionStart()' в этом случае не будет работать. Посмотрите на приведенный ниже пример Дэвида. –

ответ

7

Grrr Я нашел более легкое решение, скорее использую SimpleAttributeSet от JTextPaneStyledDocument.

Магия происходит в: StyleConstants.setBackground(sas, Color.RED); также может быть setForeground(..).

Чем, если мы выбираем текст, он применяет внутренний фломастер который мы видим, охватывающих наш выделенный текст (изображение 2) - что и было сделано на уровне документа, при этом не мешая выбора пользователя маркером которой JTextPane использует по умолчанию - полностью.

Проверить здесь:

При запуске приложения:

enter image description here

после того как я выбран текст:

enter image description here

import java.awt.Color; 
import javax.swing.JFrame; 
import javax.swing.JTextPane; 
import javax.swing.SwingUtilities; 
import javax.swing.text.SimpleAttributeSet; 
import javax.swing.text.StyleConstants; 
import javax.swing.text.StyledDocument; 

public class HighlightTest { 

    String[] words = new String[]{"world", "cruel"}; 
    int[] wordsStartPos = new int[]{6, 21}; 
    String text = "Hello world, Goodbye cruel world"; 

    public HighlightTest() { 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

       JTextPane jta = new JTextPane(); 

       jta.setText(text); 

       SimpleAttributeSet sas = new SimpleAttributeSet(); 
       StyleConstants.setBackground(sas, Color.RED); 
       StyledDocument doc = jta.getStyledDocument(); 

       for (int i = 0; i < wordsStartPos.length; i++) { 
        doc.setCharacterAttributes(wordsStartPos[i], words[i].length(), sas, false); 
       } 
       frame.add(jta); 

       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     new HighlightTest(); 
    } 
} 
+0

Мне нужно выделить выделенный текст, не удаляя выделение выделенного текста. Спасибо за код. – user12458

+0

@JavaTechnical и? вы проверили/посмотрели мой код? просто измените 'removeSelectedTextHighlightes (..)' 'на String text = textComp.getSelectedText(); System.out.println (текст); 'и он должен вывести вам выделенный текст (конечно, удалите код, который выделяет делеты, если вы этого не хотите. –

+0

@JavaTechnical см. ** обновление ** по моему ответу –