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的教程中有描述

【讨论】:

另见StyledDocumentexample。

以上是关于JTextPane:如何设置字体大小的主要内容,如果未能解决你的问题,请参考以下文章

java的字体的颜色,型号,大小的方法

如何在 JTextPane 中的一行上设置自定义背景颜色

SWT中Label字体的大小如何设置

安卓手机字体大小调整破解教程

我用HTML5做手机网页,如何设置字体大小以适合各种设备?

如何设置Navicat的显示字体与字体大小?