2012-04-17 2 views
0

Я пытаюсь выделить только одну определенную строку в JTextArea, но я понятия не имею, как это происходит. Мне нужно получить конкретную строку, а затем выделить ее. Я читал другие сообщения, но я до сих пор не понимаю, как собрать их вместе, чтобы решить мою проблему ... помощь была бы очень оценена.Выделите одну конкретную строку/строку в JTextArea

+3

Вы попробовали этот замечательный POST, [Как выделить @mKorbel] (http://stackoverflow.com/questions/9650992/how-to-change-text-color-in-the-jtextarea/9651404#9651404) –

+2

-1 для того, чтобы не исследовать это. Первое, что появилось в Google, - это фрагмент кода, который работал. –

+0

Я пробовал те, но они не решают мою проблему выделения определенной строки, я пытаюсь получить определенную строку и выделяю ее –

ответ

11

Попробуйте свои руки на этом примере кода, и не спросить, если что-то не ясно:

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

public class TextHighlight 
{ 
    private JTextArea tarea; 
    private JComboBox cbox; 
    private JTextField lineField; 
    private String[] colourNames = {"RED", "ORANGE", "CYAN"}; 

    private Highlighter.HighlightPainter painter; 

    private void createAndDisplayGUI() 
    { 
     final JFrame frame = new JFrame("Text HIGHLIGHT"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     JPanel contentPane = new JPanel(); 
     contentPane.setBorder(BorderFactory.createTitledBorder(
       BorderFactory.createEmptyBorder(5, 5, 5, 5), "Highlighter JTextArea")); 

     tarea = new JTextArea(10, 10); 
     JScrollPane scrollPane = new JScrollPane(tarea); 
     contentPane.add(scrollPane); 

     JButton button = new JButton("HIGHLIGHT TEXT"); 
     button.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       int selection = JOptionPane.showConfirmDialog(
         frame, getOptionPanel(), "Highlighting Options : ", JOptionPane.OK_CANCEL_OPTION 
               , JOptionPane.PLAIN_MESSAGE); 
       if (selection == JOptionPane.OK_OPTION)        
       { 
        System.out.println("OK Selected"); 
        int lineNumber = Integer.parseInt(lineField.getText().trim()); 
        try 
        { 
         int startIndex = tarea.getLineStartOffset(lineNumber); 
         int endIndex = tarea.getLineEndOffset(lineNumber); 
         String colour = (String) cbox.getSelectedItem(); 

         if (colour == colourNames[0]) 
         { 
          System.out.println("RED Colour"); 
          painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED); 
          tarea.getHighlighter().addHighlight(startIndex, endIndex, painter); 
         } 
         else if (colour == colourNames[1]) 
         { 
          System.out.println("ORANGE Colour"); 
          painter = new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE); 
          tarea.getHighlighter().addHighlight(startIndex, endIndex, painter); 
         } 
         else if (colour == colourNames[2]) 
         { 
          System.out.println("CYAN Colour"); 
          painter = new DefaultHighlighter.DefaultHighlightPainter(Color.CYAN); 
          tarea.getHighlighter().addHighlight(startIndex, endIndex, painter); 
         } 
        } 
        catch(BadLocationException ble) 
        { 
         ble.printStackTrace(); 
        } 
       } 
       else if (selection == JOptionPane.CANCEL_OPTION) 
       { 
        System.out.println("CANCEL Selected"); 
       } 
       else if (selection == JOptionPane.CLOSED_OPTION) 
       { 
        System.out.println("JOptionPane closed deliberately."); 
       } 
      } 
     }); 

     frame.add(contentPane, BorderLayout.CENTER); 
     frame.add(button, BorderLayout.PAGE_END); 

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

    private JPanel getOptionPanel() 
    { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(0, 2, 5, 5)); 

     JLabel lineNumberLabel = new JLabel("Enter Line Number : "); 
     lineField = new JTextField(10); 

     JLabel colourLabel = new JLabel("Select One Colour : "); 
     cbox = new JComboBox(colourNames); 

     panel.add(lineNumberLabel); 
     panel.add(lineField); 
     panel.add(colourLabel); 
     panel.add(cbox); 

     return panel; 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new TextHighlight().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

Вот выход из него:

HIGHLIGHTER EXAMPLE

+1

спасибо за ваш пример кода, это то, что я сделал вместо этого. 'код RectanglePainter красный = новый RectanglePainter (цвет.RED); попытка { f1.textarea.getHighlighter() addHighlight (f1.textarea.getLineStartOffset (АйЛайн), f1.textarea.getLineEndOffset (АйЛайн), красный);. // } задвижка (BadLocationException ех) { ex.printStackTrace (); } ' –

3

Если вы не можете выбрать Причина TextArea to TextField заключается в нажатии кнопки, что приводит к тому, что JTextArea теряет фокус и, следовательно, не показывает его выбор. при использовании события нажатия кнопки btnImport.transferFocusBackward(); для решения проблемы.

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