fontsel.java

来自「java应用举例3」· Java 代码 · 共 130 行

JAVA
130
字号
import java.lang.Integer;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;

public class FontSel extends JApplet implements ItemListener {
    //创建程序所需要的组件
    JLabel fontLabel, sizeLabel, styleLabel;
    FontPanel fontC;
    JComboBox fonts, sizes, styles;   
    String fontchoice = "fontchoice";
    int index = 0;
    int stChoice = 0;
    String siChoice = "10";
    public void init() {
        //设置小应用程序的布局为BorderLayout布局
        getContentPane().setLayout( new BorderLayout() );
        //创建五个Panel来装载组件,并将其添加到小应用程序中
        JPanel topPanel = new JPanel();
        JPanel fontPanel = new JPanel();
        JPanel sizePanel = new JPanel();
        JPanel stylePanel = new JPanel();
        JPanel sizeAndStylePanel = new JPanel();
        topPanel.setLayout( new BorderLayout() );
        fontPanel.setLayout( new GridLayout( 2, 1 ) );
        sizePanel.setLayout( new GridLayout( 2, 1 ) );
        stylePanel.setLayout( new GridLayout( 2, 1 ) );
        sizeAndStylePanel.setLayout( new BorderLayout() );
        topPanel.add( BorderLayout.WEST, fontPanel );
        sizeAndStylePanel.add( BorderLayout.WEST, sizePanel );
        sizeAndStylePanel.add( BorderLayout.CENTER, stylePanel );
        topPanel.add( BorderLayout.CENTER, sizeAndStylePanel );
        getContentPane().add( BorderLayout.NORTH, topPanel );
        //创建标签
        fontLabel = new JLabel();
        fontLabel.setText("字体");
        fontLabel.setHorizontalAlignment(JLabel.CENTER);
        fontPanel.add(fontLabel);
        sizeLabel = new JLabel();
        sizeLabel.setText("大小");
        sizeLabel.setHorizontalAlignment(JLabel.CENTER);
        sizePanel.add(sizeLabel);
        styleLabel = new JLabel();
        styleLabel.setText("形式");
        styleLabel.setHorizontalAlignment(JLabel.CENTER);
        stylePanel.add(styleLabel);
        //创建一个GraphicsEnvironment对象,它是图形环境,是这个程序的关键
        GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
        //获得字体信息名称
        String envfonts[] = gEnv.getAvailableFontFamilyNames();
        //创建一个向量对象,来保存字体对象
        Vector vector = new Vector();
        for ( int i = 1; i < envfonts.length; i++ ) {
            vector.addElement(envfonts[i]);
        }
        //用一个选择框将字体对象加入,
        fonts = new JComboBox( vector );
        fonts.addItemListener(this);
        fontchoice = envfonts[0];
        fontPanel.add(fonts);
        //用一个选择框将字体大小加入
        sizes = new JComboBox( new Object[]{ "10", "12", "14", "16", "18"} );
        sizes.addItemListener(this);
        sizePanel.add(sizes);
        //用一个选择框将字体形式对象加入
        styles = new JComboBox( new Object[]{
                                "PLAIN",
                                "BOLD",
                                "ITALIC",
                                "BOLD & ITALIC"} );
        styles.addItemListener(this);
        stylePanel.add(styles);
        fontC = new FontPanel();
        fontC.setBackground(Color.white);
        getContentPane().add( BorderLayout.CENTER, fontC);
    }

    public void itemStateChanged(ItemEvent e) {
        if ( e.getStateChange() != ItemEvent.SELECTED ) {
            return;
        }
        if ( e.getSource() == fonts ) {
            //将字体类型的名称保存
            fontchoice = (String)fonts.getSelectedItem();
        } else if ( e.getSource() == styles ) {
            index = styles.getSelectedIndex();
            //将字体大小保存
            stChoice = index;
        } else {
            ////将字体形式的名称保存
            siChoice = (String)sizes.getSelectedItem();
        }
        //用上面得到的字体信息对本程序的字体进行设定,实现了字体的转换
        fontC.changeFont(fontchoice, stChoice, siChoice);
    }
}
class FontPanel extends JPanel {
    Font thisFont;
    //构造方法
    public FontPanel(){ 
        thisFont = new Font("Arial", Font.PLAIN, 10);
    }
    public void changeFont(String f, int st, String si){
        Integer newSize = new Integer(si);
        int size = newSize.intValue();
        thisFont = new Font(f, st, size);
        repaint();
    }
    public void paintComponent (Graphics g) {
        super.paintComponent( g );
        //获得画笔对象
        Graphics2D myPen = (Graphics2D) g;
        //获得小应用程序的宽和高
        int w = getWidth();
        int h = getHeight();
        //设定画笔颜色和字体
        myPen.setColor(Color.red);
        myPen.setFont(thisFont);
        String change = "I love Java";
        FontMetrics metrics = myPen.getFontMetrics();
        int width = metrics.stringWidth( change );
        int height = metrics.getHeight();
        //在指定的位置用你所选择的字体写"I Love Java"
        myPen.drawString( change, w/2-width/2, h/2-height/2 );
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?