JTextPane:如何设置字体大小
Posted
技术标签:
【中文标题】JTextPane:如何设置字体大小【英文标题】:JTextPane: How to set the font size 【发布时间】:2012-05-22 02:13:03 【问题描述】:请看下面的代码
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class Form extends JFrame
private JTextPane textPane;
private JLabel results;
private JPanel center,south;
private FlowLayout flow;
private ArrayList array;
private Color color;
private StyledDocument doc;
private Style style, fontSize;
public Form()
textPane = new JTextPane();
textPane.setMinimumSize(new Dimension(100,100));
doc = textPane.getStyledDocument();
doc.addDocumentListener(new TextActions());
results = new JLabel("Number of letters: ");
array = new ArrayList();
array.add("public");
array.add("static");
array.add("void");
array.add("private");
array.add("protected");
color = new Color(185,224,247);
//Adding styles
style = doc.addStyle("blue", null);
StyleConstants.setForeground(style, color);
fontSize = doc.addStyle("fontSize", null);
StyleConstants.setFontSize(fontSize, 25);
//Setting the font Size
doc.setCharacterAttributes(0, doc.getLength(), fontSize, false);
center = new JPanel();
flow = new FlowLayout();
center.setLayout(flow);
center.add(textPane);
south = new JPanel();
south.setLayout(new FlowLayout());
south.add(results);
getContentPane().add(textPane,"Center");
getContentPane().add(south,"South");
private class TextActions implements DocumentListener
@Override
public void insertUpdate(DocumentEvent e)
try
highlighat();
catch (BadLocationException ex)
ex.printStackTrace();
@Override
public void removeUpdate(DocumentEvent e)
try
highlighat();
catch (BadLocationException ex)
ex.printStackTrace();
@Override
public void changedUpdate(DocumentEvent e)
private void highlighat() throws BadLocationException
EventQueue.invokeLater(new Runnable()
public void run()
String text = "";
String content = null;
try
content = doc.getText(0, doc.getLength()).toLowerCase();
catch (BadLocationException ex)
ex.printStackTrace();
int last=0;
for(int i=0;i<array.size();i++)
text = array.get(i).toString();
if(content.contains(text))
while((last=content.indexOf(text,last))!=-1)
int end = last+text.length();
doc.setCharacterAttributes(last, end, textPane.getStyle("blue"), true);
last++;
);
public static void main(String[]args)
try
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
catch(Exception e)
Form f = new Form();
f.setVisible(true);
f.setSize(800,600);
f.validate();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
在那里,我还尝试将字体大小设置为 25,但正如您所见,它不起作用。 “textPane.setFont()”也不起作用。如何正确设置字体大小?请帮忙..
【问题讨论】:
textPane.setFont(new Font("Arial", Font.BOLD, 22);
没用?
当然可以,测试一下,不行。
【参考方案1】:
当然,您可以创建一个字体对象并使用它来设置文本窗格的字体。 像这样实例化它:
Font f = new Font(Font.SANS_SERIF, 3, 5);
【讨论】:
您的字体有 2 个字符串和一个数字。字体构造函数只需要一个字符串类型和一个数字。我不知道如何用特定字体加粗,也许你可以应用 2 种字体 @loveToCode,我建议使用常量而不是硬编码的整数。新字体(Font.SANS_SERIF,Font.BOLD,25); //Bold new Font(Font.SANS_SERIF, Font.ITALIC, 25); //斜体 new Font(Font.SANS_SERIF, Font.PLAIN, 25); //Plain Ref: docs.oracle.com/javase/7/docs/api/java/awt/Font.html 要使用特定字体,可以使用 GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();获取所有字体,如果你想让用户选择,或者你可以像这样专门创建一个:Font mediumFont = new Font("Yu Mincho Regular", Font.BOLD, 30);【参考方案2】:也许这段代码会对你有所帮助,关于Highlighter and StyledDocument,其余的在关于JTextPane / EditorPane的教程中有描述
【讨论】:
另见StyledDocument
example。以上是关于JTextPane:如何设置字体大小的主要内容,如果未能解决你的问题,请参考以下文章