2012-05-14 143 views
5

请看看下面的代码的JTextPane:如何设置字体大小

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()”也没有工作。我怎样才能正确设置字体大小?请帮助..

+0

'textPane.setFont(新字体( “宋体”,Font.BOLD,22);'没有工作 – nullpotent

+0

当然,你可以测试它,它不工作? –

回答

7

当然,你可以创建一个字体对象,并用它来设置你的文本窗格中的字体。 实例化这样的:

Font f = new Font(Font.SANS_SERIF, 3, 5); 
+0

哇!必须说这是工作和惊人的!非常感谢! –

+2

那么,我的提议怎么样没有工作? – nullpotent

+0

你的字体有2个字符串和一个数字字体构造函数只需要一个字符串类型和一个数字我不知道如何使用特定字体粗体显示,也许你可以应用2种字体 – loveToCode