java字体对话框

java中没有自带的字体对话框,需要自己来编写。

package com.hf.app.lucky.frame;

/*
 *   JFontChooser.java
 *
 *   Created   on   2011年1月7日

 *
 *   To   change   this   template,   choose   Tools   |   Template   Manager
 *   and   open   the   template   in   the   editor.
 */

/**
 *
 *   @author    
 */
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;
 }

 public static void main(String[] args) {
  System.out.println(JFontChooser.showDialog(null, "字体选择 "));
 }
}

你可能感兴趣的:(java字体对话框)