2015-11-14 3 views
1

Я искал способ выделить выделенную строку в JTextArea. Есть много сообщений о том, как выделить текст в JTextArea, но он доходит только до буквы. Я хочу иметь возможность выделить всю строку (так же, как редактор eclipse выделяет всю текущую строку, на которой вы находитесь, когда вы нажимаете на строку). Все, что я нашел, указывают на объект Highlighter, но я не уверен, что это подчеркнет несимвольную область JTextArea. Кроме того, есть ли способ найти, что выбрана в JTextArea? Не столько строк, сколько выбранных (например, кто-то нажимает на предыдущую точку). Или это очень сложный процесс для расчета?Выделение выделенной строки в JTextArea

ответ

5

Вам необходимо включить слоистые блики от:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.text.*; 

public class SSCCE extends JPanel 
{ 
    public SSCCE() 
    { 
     JTextArea textArea = new JTextArea(4, 30); 
     textArea.setText("one\ntwo\nthree"); 
     add(new JScrollPane(textArea)); 


     DefaultHighlighter highlighter = (DefaultHighlighter)textArea.getHighlighter(); 
     DefaultHighlighter.DefaultHighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED); 
     highlighter.setDrawsLayeredHighlights(false); // this is the key line 

     try 
     { 
      int start = textArea.getLineStartOffset(1); 
      int end = textArea.getLineEndOffset(1); 
      highlighter.addHighlight(start, end, painter); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
     } 
    } 


    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("SSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new SSCCE()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(() -> createAndShowGUI()); 
/* 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
*/ 
    } 
} 

Вы также можете проверить Line Painter класс, который будет выделить текущую строку, как каретка перемещается. Таким образом, этот класс будет управлять подсветкой. То есть, когда каретка перемещается из строки в строку, предыдущая подсветка удаляется и добавляется новая подсветка.

Смежные вопросы