Вопрос по java, swing, highlight – Выделите одну конкретную строку / строку в JTextArea

0

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

"I've tried those links you posted"  1) Никто, кроме меня, не был уведомлен об этом комментарии. 2)We are not psychic.  По этой причине, чертовски неплохо упомянуть то, что вы пробовали, потоки, на которые вы смотрели, почему они не соответствовали спецификации. (так далее.).SO is not a help-desk, but a Q&A site. The better specified question gets the better answer. Andrew Thompson
-1 за то, что не исследовал это. Первое, что появилось в Google, это фрагмент кода, который сработал. Youssef G.
Я пробовал их, но они не решают мою проблему выделения определенной строки, я пытаюсь получить конкретную строку и выделить ее Jeffrey Odametey
Если бы вы попробовали этот замечательный пост,How to highlight by @mKorbel nIcE cOw
"still do not understand"  Вы понимаете, как задать вопрос? Если это так, пожалуйста, добавьте один и сделайте его конкретным."they do not solve my problem of highlighting a specific row"  Это имеет смысл, только если строки не переносятся по словам. Кроме того, если вы «не можете заставить его работать» вам лучше всего опубликоватьSSCCE из ваших лучших усилий. Я не вижу, чтобы кто-либо, способный на это, мог бы дать ответ на этот очень специфический вопрос. Andrew Thompson

Ваш Ответ

2   ответа
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

спасибо за пример кода, это то, что я сделал вместо этого.code RectanglePainter red = new RectanglePainter( Color.RED ); try { f1.textarea.getHighlighter().addHighlight(f1.textarea.getLineStartOffset(iline), f1.textarea.getLineEndOffset(iline), red);// } catch (BadLocationException ex) { ex.printStackTrace(); } Jeffrey Odametey
3

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

Похожие вопросы