Вопрос по java, font-size, swing – JTextPane: как установить размер шрифта

5

Пожалуйста, взгляните на следующий код

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 ()" также не работает. Как правильно установить размер шрифта? Пожалуйста помоги.

Конечно, вы можете проверить это, оно не работает. PeakGen
textPane.setFont(new Font("Arial", Font.BOLD, 22); не сработало? nullpotent

Ваш Ответ

2   ответа
7

вы можете создать объект шрифта и использовать его для установки шрифта вашей текстовой панели. Создайте это так:

    Font f = new Font(Font.SANS_SERIF, 3, 5);
Вау! Должен сказать, что это работает и удивительно! Большое спасибо PeakGen
Так почему же мое предложение не сработало? nullpotent
рифт @your получил 2 строки и число. Для конструктора шрифта требуется только один тип строки и число. Я не уверен, как сделать что-то жирное с определенным шрифтом, может быть, вы можете применить 2 шрифта loveToCode
@ loveToCode, я бы порекомендовал использовать константы вместо жестко закодированных целых. новый шрифт (Font.SANS_SERIF, Font.BOLD, 25); // Жирный новый шрифт (Font.SANS_SERIF, Font.ITALIC, 25); // Курсив новый шрифт (Font.SANS_SERIF, Font.PLAIN, 25); // Простая ссылка: Docs.oracle.com / JavaSE / 7 / документы / API / Java / AWT / Font.html Чтобы сделать это с определенным шрифтом, вы можете использовать GraphicsEnvironment.getLocalGraphicsEnvironment (). GetAllFonts (); чтобы получить все шрифты, если вы хотите, чтобы пользователь выбрал их, или вы можете создать такой, как этот: Font mediumFont = new Font ("Yu Mincho Regular", Font.BOLD, 30); techdude
2

Highlighter and StyledDocument, отдых описан в учебнике оJTextPane / EditorPane

Смотрите также этоStyledDocument приме. trashgod

Похожие вопросы