你好,我正在开发一个聊天应用程序,希望用户可以更改他/她正在编写的字体。有一个setFont()
函数,但它会改变TextArea中所有字符串的字体。所以我只想改变我的字体。如果您能帮助我,我将不胜感激。
那么我猜我必须学一些 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) {}
textPane.getDocument().getLength()
。 - camickr您应该使用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();
}
}
你无法使用JTextArea
实现这个功能,但是你可以使用它更高级的表亲JTextPane
来实现。不幸的是,这并不是一个简单的过程;你可以在这里了解更多关于这个类的信息。
许多Swing组件可以呈现基本的HTML(版本3.2),包括JLabel
和JEditorPane
。有关更多详细信息,请参见Java教程中的如何在Swing组件中使用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);
}
});
}
}
JFrame
少了几行代码。 ;) - Andrew ThompsonJTextPane
是这种用例的绝佳选择。 - Andrew ThompsonsetPreferredSize()
、传递给布局约束或构造函数的魔数(指定大小)或使用CSS指定宽度的HTML的情况下,正确地调整JEditorPane
或JTextPane
的大小?( *我的意思是,“除了占卜或解剖之外”。;) - Andrew Thompson