⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jfontchooser.java

📁 用JAVA编写实现的字体选择器
💻 JAVA
字号:
/*
 * JFontChooser.java
 *
 * Created on 2006年11月17日, 上午11:21
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package lbf.swing;

/**
 *
 * @author lbf
 */
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import javax.swing.event.*;
public class JFontChooser extends JPanel implements ActionListener,ListSelectionListener{
    private JDialog jd;//用于显示模态的窗体
    private JComboBox fonts;//用于选择字体的下拉框
    private JList face,size;//用于选择字形和字号的列表
    private JTextField sizeJT;//用于显示选中的字形和字号
    private JButton ok,cancel;//表示选中和取消的按钮
    private Font current;//表示当然选中的字体
    private GraphicsEnvironment ge;//表示当前的图形环境
    private JLabel demo;//表示预览的label
    private String fontName="宋体";
    private int fontStyle=Font.PLAIN,fontSize=20;
    private Frame owner;//表示父类的组件窗体
    private Hashtable<String,Integer> ht;//名字到大小的映射
    /** Creates a new instance of JFontChooser */
    private JFontChooser() {
        initOther();
    }
    private void initOther(){
        current=new Font(fontName,fontStyle,fontSize);
        ht=new Hashtable<String,Integer>();
        sizeJT=new JTextField("20");
        sizeJT.setEditable(false);
        sizeJT.setBounds(260,40,50,20);
        ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] family=ge.getAvailableFontFamilyNames();
        fonts=new JComboBox(family);
        fonts.setEditable(false);
        fonts.setMaximumRowCount(5);
        demo=new JLabel("中文字 ABCD abcd",JLabel.CENTER);
        demo.setFont(current);
        String[] faceString={"正常","粗体","斜体","粗体+斜体"};
        String[] sizeString={"初号","小初","一号","小一","二号","小二",
        "三号","小三","四号","小四","五号","小五","六号","小六","七号",
        "八号","5","8","9","10","11","12","14","16","18","20","22","24",
        "26","28","36","48","72"};
        int[] sizeValue={42,36,26,24,22,18,16,15,14,12,11,9,7,6,5,4,5,8,9,10,11,12,14,16,18,20,
        22,24,26,28,36,48,72};
        for(int i=0;i<sizeString.length;i++){
            ht.put(sizeString[i],sizeValue[i]);
        }
        face=new JList(faceString);
        size=new JList(sizeString);
        face.setSelectedIndex(0);
        size.setSelectedIndex(25);
        fonts.setSelectedItem("宋体");
        face.setVisibleRowCount(4);
        size.setVisibleRowCount(4);
        ok=new JButton("确定");
        cancel=new JButton("取消");
        ok.addActionListener(this);
        cancel.addActionListener(this);
        fonts.addActionListener(this);
        face.addListSelectionListener(this);
        size.addListSelectionListener(this);
    }
    private void initWindow(String title){
        this.setLayout(new BorderLayout());
        JLabel fontLabel=new JLabel("字体");
        JLabel faceLabel=new JLabel("字形");
        JLabel sizeLabel=new JLabel("字号");
        fontLabel.setForeground(Color.RED);
        faceLabel.setForeground(Color.RED);
        sizeLabel.setForeground(Color.RED);
        fontLabel.setBounds(20,20,100,20);
        faceLabel.setBounds(180,20,80,20);
        sizeLabel.setBounds(260,20,50,20);
        fonts.setBounds(10,40,127,21);
        JScrollPane faceScroll=new JScrollPane(face);
        JScrollPane sizeScroll=new JScrollPane(size);
        faceScroll.setBounds(180,40,65,100);
        sizeScroll.setBounds(260,60,50,80);
        JPanel up=new JPanel(null);
        JPanel center=new JPanel(new BorderLayout());
        JPanel bottom=new JPanel();
        up.setPreferredSize(new Dimension(345,160));
        up.add(fontLabel);
        up.add(faceLabel);
        up.add(sizeLabel);
        up.add(fonts);
        up.add(faceScroll);
        up.add(sizeScroll);
        up.add(sizeJT);
        up.setBorder(BorderFactory.createTitledBorder("选择区"));
        center.add(demo,BorderLayout.CENTER);
        center.setBorder(BorderFactory.createTitledBorder("预览区"));
        bottom.add(ok);
        bottom.add(cancel);
        this.add(up,BorderLayout.NORTH);
        this.add(center,BorderLayout.CENTER);
        this.add(bottom,BorderLayout.SOUTH);
        jd=new JDialog(owner,title,true);
        jd.getContentPane().add(this,BorderLayout.CENTER);
        jd.setSize(360,360);
        jd.setResizable(false);
        jd.setLocationRelativeTo(owner);
        jd.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent we){
                current=null;
                jd.dispose();
            }
        });
        jd.setVisible(true);
    }
    public void actionPerformed(ActionEvent ae){
        if(ae.getSource()==fonts){
            fontName=(String)fonts.getSelectedItem();
            current=new Font(fontName,fontStyle,fontSize);
            demo.setFont(current);
            this.repaint();
        }else if(ae.getSource()==ok){
            jd.dispose();
        }else if(ae.getSource()==cancel){
            current=null;
            jd.dispose();
        }
    }
    public void valueChanged(ListSelectionEvent le){
        if(le.getSource()==face){
            String value=(String)face.getSelectedValue();
            if(value.equals("正常")){
                fontStyle=Font.PLAIN;
            }else if(value.equals("粗体")){
                fontStyle=Font.BOLD;
            }else if(value.equals("斜体")){
                fontStyle=Font.ITALIC;
            }else if(value.equals("粗体+斜体")){
                fontStyle=Font.ITALIC|Font.BOLD;
            }
            current=new Font(fontName,fontStyle,fontSize);
            demo.setFont(current);
            this.repaint();
        }else if(le.getSource()==size){
            String sizeName=(String)size.getSelectedValue();
            sizeJT.setText(sizeName);
            fontSize=ht.get(sizeName);
            current=new Font(fontName,fontStyle,fontSize);
            demo.setFont(current);
            this.repaint();
        }
    }
    public static Font showDialog(Frame owner,String title){
        JFontChooser jf=new JFontChooser();
        jf.initWindow(title);
        return jf.current;
    }
   
}

⌨️ 快捷键说明

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