更改JTextArea中特定行的字体

时间:2011-09-06 16:57:11

标签: java swing fonts jtextarea

您好我正在处理聊天应用程序,我希望该用户可以更改他/她正在编写的字体。有一个setFont()函数,但它会更改TextArea中所有字符串的字体。所以我只想改变我的字体。如果你能帮助我,我很感激。

4 个答案:

答案 0 :(得分:9)

  

那么我想我必须学习一个小小的HTML

我不会使用HTML。我发现在处理文本窗格时更容易使用属性。在尝试操作HTML时,属性更容易更改。

SimpleAttributeSet green = new SimpleAttributeSet();
StyleConstants.setFontFamily(green, "Courier New Italic");
StyleConstants.setForeground(green, Color.GREEN);

//  Add some text

try
{
    textPane.getDocument().insertString(0, "green text with Courier font", green);
}
catch(Exception e) {}

答案 1 :(得分:3)

您应该使用JTextPane。 JTextPane允许您使用HTML。请检查以下示例:

this.text_panel = new JTextPane();
this.text_panel.setContentType("text/html");
this.text_panel.setEditable(false);
this.text_panel.setBackground(this.text_background_color);
this.text_panel_html_kit = new HTMLEditorKit();
this.text_panel.setEditorKit(text_panel_html_kit);
this.text_panel.setDocument(new HTMLDocument());

在这里启用HTMLEditorKit,它允许您在TextPane中使用HTML。这是另一个代码,您可以在其中添加彩色文本:

public void append(String line){
    SimpleDateFormat date_format = new SimpleDateFormat("HH:mm:ss");
    Date date = new Date();

    line = "<div><font size=3 color=GRAY>[" + date_format.format(date) + "]</font><font size=3 color=BLACK>"+ line + "</font></div>";

    try {
        this.text_panel_html_kit.insertHTML((HTMLDocument) this.text_panel.getDocument(), this.text_panel.getDocument().getLength(), line, 0, 0, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}


希望这有帮助,
谢尔盖。

答案 2 :(得分:2)

你不能用JTextArea做到这一点,但是你可以用它的表兄弟JTextPane来做到这一点。不幸的是,这不是微不足道的;你可以了解这个课程here.

答案 3 :(得分:1)

各种Swing组件将呈现基本HTML(版本3.2),包括JLabel&amp; JEditorPane。有关详细信息,请参阅Java教程中的How to Use HTML in Swing Components

以下是使用后者的简单示例。

Fonts rendered in HTML

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

class ShowFonts {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                GraphicsEnvironment ge = GraphicsEnvironment.
                    getLocalGraphicsEnvironment();
                        String[] fonts = ge.getAvailableFontFamilyNames();
                String pre = "<html><body style='font-size: 20px;'><ul>";
                StringBuilder sb = new StringBuilder(pre);
                for (String font : fonts) {
                    sb.append("<li style='font-family: ");
                    sb.append(font);
                    sb.append("'>");
                    sb.append(font);
                }
                JEditorPane ep = new JEditorPane();
                ep.setContentType("text/html");
                ep.setText(sb.toString());


                JScrollPane sp = new JScrollPane(ep);
                Dimension d = ep.getPreferredSize();
                sp.setPreferredSize(new Dimension(d.width,200));

                JOptionPane.showMessageDialog(null, sp);
            }
        });
    }
}