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, "字体选择 ")); } }