java字体对话框

    技术2022-06-26  49

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


    最新回复(0)