Как я могу отобразить красный текст в JTextArea? - PullRequest
3 голосов
/ 05 марта 2010

Я хочу показать ошибку (текст) в результате красным цветом после компиляции exec файла и отобразить его в текстовой области графического интерфейса пользователя, используя качели в Java.

Ответы [ 4 ]

2 голосов
/ 05 марта 2010

JEditorPane может получать контент, отформатированный в HTML. официальный учебник Sun также дает некоторое представление:

Класс JTextArea предоставляет компонент, который отображает несколько строк текста и дополнительно позволяет пользователю редактировать текст. Если вам нужно получить только одну строку ввода от пользователя, вы должны использовать текстовое поле. Если вы хотите, чтобы в текстовой области отображался ее текст с использованием нескольких шрифтов или других стилей, вам следует использовать панель редактора или текстовую панель. Если отображаемый текст имеет ограниченную длину и никогда не редактируется пользователем, используйте метку.

2 голосов
/ 05 марта 2010

Обычная JTextArea не поддерживает такие причудливые вещи, как разные цвета текста. Тем не менее, есть аналогичные компоненты, которые делают. Смотри http://java.sun.com/docs/books/tutorial/uiswing/components/text.html

1 голос
/ 05 марта 2010

Вот краткий пример добавления текста в JEditorPane с использованием AttributeSet и StyleConstants.

Это приводит к появлению небольшого фрейма с JEditorPane, и вы можете использовать его для добавления текста большого количества цветов без использования HTML.

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

public class TextColor extends JFrame implements ActionListener {

  JTextPane myTextPane;
  JTextArea inputTextArea;

  public TextColor() {
    super();
    JPanel temp = new JPanel(new BorderLayout());
    inputTextArea = new JTextArea();
    JButton btn = new JButton("Add");
    btn.addActionListener(this);
    temp.add(btn, BorderLayout.SOUTH);
    temp.add(inputTextArea, BorderLayout.NORTH);
    this.getContentPane().add(temp, BorderLayout.SOUTH);
    myTextPane = new JTextPane();
    myTextPane.setBorder(new EtchedBorder());
    this.getContentPane().add(myTextPane, BorderLayout.CENTER);
    this.setSize(600, 600);
    this.setVisible(true);


  }

  public void actionPerformed(ActionEvent ae) {
    Color newTextColor = JColorChooser.showDialog(this, "Choose a Color", Color.black);
    //here is where we change the colors
    SimpleAttributeSet sas = new SimpleAttributeSet(myTextPane.getCharacterAttributes());
    StyleConstants.setForeground(sas, newTextColor);
    try {
      myTextPane.getDocument().insertString(myTextPane.getDocument().getLength(),
          inputTextArea.getText(), sas);
    } catch (BadLocationException ble) {
      ble.printStackTrace();
    }

  }

  public static void main(String args[]) {

    new TextColor();
  }

}
0 голосов
/ 13 марта 2010

Smita,

позаботьтесь о том, чтобы вставить фрагмент своего кода, чтобы можно было понять, где именно проблема, или требуется помощь.

Приходя к вашей проблеме,

Насколько мне известно, нет способа установить разные цвета для разных текстовых элементов в textArea в Java. Вы можете установить только один цвет для всех.

Альтернативой является использование JTextPane.

Посмотрите, поможет ли вам следующий код.

String text = "Some Text...";    //This can be any piece of string in your code like 
                                   output of your program...
JTextPane myTextPane = new JTextPane();

SimpleAttributeSet sas = new SimpleAttributeSet(myTextPane.getCharacterAttributes());


// As what error you were referring was not clear, I assume there is some code in your    
   program which pops out some error statement. For convenience I use Exception here..
if( text.contains("Exception") ) //Checking if your output contains Exception...
{
    StyleConstants.setForeground(sas, Color.red); //Changing the color of 
    StyleConstants.setItalic(sas, true);

    try
    {
       myTextPane.getDocument().insertString
       (
          myTextPane.getDocument().getLength(),
          text + "\n",
          sas
       );
    }
    catch( BadLocationException ble )
    {
        text.append(ble.getMessage());
    }
}
else
{
    StyleConstants.setForeground(sas, Color.GREEN);

    try
    {
       myTextPane.getDocument().insertString
       (
          myTextPane.getDocument().getLength(),
          text + "\n",
          sas
        );
    }
    catch(BadLocationException ble)
    {
        text.append(ble.getMessage());
    }
}

Полагаю, это решит вашу проблему с помощью нескольких модификаций.

Спасибо.

Sushil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...