zoukankan      html  css  js  c++  java
  • [JAVA] java仿windows 字体设置选项卡

    想用java做一个像windows里一样的txt编辑软件,涉及到字体设置选项卡,在网上找了很久都没找到,就生气啦自己写一个,现在贴这里分享一下,下次再遇到这样的问题就不用自己亲自打代码啦!

      1 package 实验;
      2 
      3 import java.awt.*;
      4 import java.awt.event.ActionEvent;
      5 import java.awt.event.ActionListener;
      6 import java.awt.event.MouseAdapter;
      7 import java.awt.event.MouseEvent;
      8 
      9 import javax.swing.*;
     10 import javax.swing.border.BevelBorder;
     11 
     12 /**
     13  * 字体格式设置对话框
     14  */
     15 
     16 public class FontFormat extends JDialog {
     17 
     18     private JLabel nameLb;
     19     private JLabel styleLb;
     20     private JLabel sizeLb;
     21     private JLabel presLb;
     22     private JTextField nameTx;
     23     private JTextField styleTx;
     24     private JTextField sizeTx;
     25     private JTextField presTx;
     26     private JList nameLt;
     27     private JList styleLt;
     28     private JList sizeLt;
     29     private JScrollPane jScrollPane1;
     30     private JScrollPane jScrollPane2;
     31     private JScrollPane jScrollPane3;
     32     private JButton approve;
     33     private JButton cancel;
     34     private JButton chose;
     35     private JRadioButton[] language = new JRadioButton[2];
     36     private ButtonGroup languageg;
     37     private String Slanguage[] = { new String("李涛"), new String("ABC") };
     38 
     39     private static JFrame frame;
     40     public Font font, newFont;// 字体类
     41     private Color color;// 颜色类
     42     Color newColor;
     43 
     44     private JFileChooser fileChoose = new JFileChooser();// 文件选择类实例
     45     private JDialog colorDlg;// 颜色对话框
     46     private JColorChooser colorChoose = new JColorChooser();// 颜色选择类实例
     47 
     48     private GraphicsEnvironment environment; // 该类中又获取系统字体的方法;
     49     private String[] fontNameSet;// 字体‘逻辑名’集
     50     // 字体‘样式’集的字符串数组
     51     private String[] fontStyleSet = { "常规", "倾斜", "加粗", "倾斜 加粗" };
     52     // 字体‘样式’集的常量数组
     53     private Integer[] fontCon = { Font.PLAIN, Font.ITALIC, Font.BOLD,
     54             Font.BOLD | Font.ITALIC };
     55     // 字体‘大小’集
     56     private String[] fontSizeSet = { "6", "7", "8", "9", "10", "11", "12",
     57             "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72" };
     58 
     59     public static void main(String args[]) {// 主函数
     60         FontFormat a = new FontFormat();
     61         a.setVisible(true);
     62     }
     63 
     64     public FontFormat() {// 无参构造函数
     65         super(frame, "李涛—字体设置窗口", true);
     66         frame = new JFrame();
     67         initGUI();
     68     }
     69 
     70     public FontFormat(JFrame frame) {// 含参构造函数
     71         super(frame, "李涛—字体设置窗口", true);
     72         this.frame = frame;// 父窗口中必须有一个public的Font对象
     73         // setAlwaysOnTop(true);
     74         initGUI();
     75     }
     76 
     77     private void initGUI() {// 字体格式选择器的界面初始化
     78         try {
     79             getContentPane().setLayout(null);
     80             environment = GraphicsEnvironment.getLocalGraphicsEnvironment();// GraphicsEnvironment是一个抽象类,不能实例化,只能用其中的静态方法获取一个实例
     81             fontNameSet = environment.getAvailableFontFamilyNames();// 获取系统字体
     82             addMenu();// 加入菜单
     83             initFont();// 初始化字体
     84             // pack();
     85             setSize(380, 337);
     86             setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
     87             setWindowPos();// 使窗口屏幕居中
     88             setResizable(false);// 大小不可变
     89         } catch (Exception e) {
     90             e.printStackTrace();
     91         }
     92     }
     93 
     94     private void initFont() {// 初始化字体
     95         // 设置默认字体格式为父窗口font对向的字体格式
     96         if (frame.getFont() == null) {
     97             nameTx.setText(fontNameSet[0]);
     98             styleTx.setText(fontStyleSet[0]);
     99             sizeTx.setText("12");
    100             nameLt.setSelectedValue(fontNameSet[0], true);
    101             styleLt.setSelectedIndex(0);
    102             sizeLt.setSelectedValue("12", true);
    103             font = new Font(fontNameSet[0], fontCon[0], 12);
    104             newFont = font;// 保存原来的字体格式
    105             presTx.setFont(font);
    106             // JOptionPane.showMessageDialog(null, "ccac");
    107         } else {
    108             int idxStyle = 0;
    109             for (int i = 0; i < fontCon.length; i++) {
    110                 if (fontCon[i] == frame.getFont().getStyle())
    111                     idxStyle = i;
    112             }
    113             nameTx.setText(frame.getFont().getName());// 改text
    114             styleTx.setText(fontStyleSet[idxStyle]);
    115             sizeTx.setText("" + frame.getFont().getSize());
    116             nameLt.setSelectedValue(frame.getFont().getName(), true);// 改list显示
    117             styleLt.setSelectedIndex(idxStyle);
    118             sizeLt.setSelectedValue("" + frame.getFont().getSize(), true);
    119             font = new Font(fontNameSet[0], fontCon[0], 12);// 保存当前格式
    120             newFont = font;// 保存原来的字体格式
    121             presTx.setFont(font);// 预览中设为当前模式
    122         }
    123     }
    124 
    125     private void addMenu() {// 加入菜单
    126         // 4个lable---------------------------------------------------------------------------------
    127         nameLb = new JLabel();
    128         getContentPane().add(nameLb);
    129         nameLb.setText("字体:");
    130         nameLb.setBounds(10, 14, 120, 26);
    131         nameLb.setFont(new java.awt.Font("SimSun", 1, 14));
    132 
    133         styleLb = new JLabel();
    134         getContentPane().add(styleLb);
    135         styleLb.setText("字型:");
    136         styleLb.setBounds(151, 14, 120, 23);
    137         styleLb.setFont(new java.awt.Font("SimSun", 1, 14));
    138 
    139         sizeLb = new JLabel();
    140         getContentPane().add(sizeLb);
    141         sizeLb.setText("大小:");
    142         sizeLb.setBounds(275, 14, 79, 24);
    143         sizeLb.setFont(new java.awt.Font("SimSun", 1, 14));
    144 
    145         presLb = new JLabel();
    146         getContentPane().add(presLb);
    147         presLb.setText("预览:");
    148         presLb.setBounds(151, 150, 120, 80);
    149         presLb.setFont(new java.awt.Font("SimSun", 1, 14));
    150 
    151         // 4个textfield---------------------------------------------------------------------------------
    152         nameTx = new JTextField();
    153         nameTx.setEditable(false);
    154         getContentPane().add(nameTx);
    155         nameTx.setBounds(10, 42, 120, 22);
    156 
    157         styleTx = new JTextField();
    158         styleTx.setEditable(false);
    159         getContentPane().add(styleTx);
    160         styleTx.setBounds(151, 42, 100, 21);
    161 
    162         sizeTx = new JTextField();
    163         sizeTx.setEditable(false);
    164         getContentPane().add(sizeTx);
    165         sizeTx.setBounds(275, 42, 79, 22);
    166 
    167         presTx = new JTextField();
    168         presTx.setEditable(false);
    169         getContentPane().add(presTx);
    170         presTx.setBounds(151, 200, 203, 61);
    171         presTx.setText(Slanguage[1]);
    172 
    173         // 3个下拉条--+监听-----------------------------------------------------------------------------
    174         jScrollPane1 = new JScrollPane();
    175         getContentPane().add(jScrollPane1);
    176         jScrollPane1.setBounds(10, 74, 120, 210);
    177         {
    178             ListModel fontNameModel = new DefaultComboBoxModel(fontNameSet);
    179             nameLt = new JList();
    180             jScrollPane1.setViewportView(nameLt);
    181             nameLt.setModel(fontNameModel);
    182             nameLt.setBounds(274, 193, 90, 86);
    183             nameLt.setBorder(BorderFactory
    184                     .createEtchedBorder(BevelBorder.LOWERED));
    185             nameLt.addMouseListener(new MouseAdapter() {
    186                 public void mouseClicked(MouseEvent evt) {
    187                     nameLtMouseClicked(evt);
    188                 }
    189             });
    190         }
    191 
    192         jScrollPane2 = new JScrollPane();
    193         getContentPane().add(jScrollPane2);
    194         jScrollPane2.setBounds(151, 74, 100, 103);
    195         {
    196             ListModel fontStyleModel = new DefaultComboBoxModel(fontStyleSet);
    197             styleLt = new JList();
    198             jScrollPane2.setViewportView(styleLt);
    199             styleLt.setModel(fontStyleModel);
    200             styleLt.setBounds(310, 215, 70, 102);
    201             styleLt.setBorder(BorderFactory
    202                     .createEtchedBorder(BevelBorder.LOWERED));
    203             styleLt.addMouseListener(new MouseAdapter() {
    204                 public void mouseClicked(MouseEvent evt) {
    205                     styleLtMouseClicked(evt);
    206                 }
    207             });
    208         }
    209 
    210         jScrollPane3 = new JScrollPane();
    211         getContentPane().add(jScrollPane3);
    212         jScrollPane3.setBounds(275, 75, 79, 100);
    213         {
    214             ListModel fontSizeModel = new DefaultComboBoxModel(fontSizeSet);
    215             sizeLt = new JList();
    216             jScrollPane3.setViewportView(sizeLt);
    217             sizeLt.setModel(fontSizeModel);
    218             sizeLt.setBounds(300, 218, 54, 102);
    219             sizeLt.setBorder(BorderFactory
    220                     .createEtchedBorder(BevelBorder.LOWERED));
    221             sizeLt.addMouseListener(new MouseAdapter() {
    222                 public void mouseClicked(MouseEvent evt) {
    223                     sizeLtMouseClicked(evt);
    224                 }
    225             });
    226         }// -------------------------------------------------------------------------------------
    227 
    228         // 中英选项(---------------------------------------------------------------------------------
    229         languageg = new ButtonGroup();
    230         language[0] = new JRadioButton("中");
    231         getContentPane().add(language[0]);
    232         language[0].setSelected(false);// 初始化显示
    233         language[0].setBounds(271, 179, 40, 20);
    234         language[0].setFont(new java.awt.Font("SimSun", 1, 12));
    235         languageg.add(language[0]);
    236         language[0].addActionListener(new ActionListener() {
    237             public void actionPerformed(ActionEvent evt) {
    238                 presTx.setText(Slanguage[0]);
    239             }
    240         });
    241 
    242         language[1] = new JRadioButton("英");
    243         getContentPane().add(language[1]);
    244         language[1].setSelected(true);
    245         language[1].setBounds(321, 179, 40, 20);
    246         language[1].setFont(new java.awt.Font("SimSun", 1, 12));
    247         languageg.add(language[1]);
    248         language[1].addActionListener(new ActionListener() {
    249             public void actionPerformed(ActionEvent evt) {
    250                 presTx.setText(Slanguage[1]);
    251             }
    252         });
    253 
    254         // 3个按钮+监听---------------------------------------------------------------------------------
    255         // 确定按钮
    256         approve = new JButton();
    257         getContentPane().add(approve);
    258         approve.setText("确定");
    259         approve.setBounds(151, 265, 67, 20);
    260         approve.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12));
    261         approve.addActionListener(new ActionListener() {
    262             public void actionPerformed(ActionEvent evt) {
    263                 approveActionPerformed(evt);
    264             }
    265         });
    266 
    267         // 取消按钮
    268         cancel = new JButton();
    269         getContentPane().add(cancel);
    270         cancel.setText("取消");
    271         cancel.setBounds(219, 265, 67, 20);
    272         cancel.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12));
    273         cancel.addActionListener(new ActionListener() {
    274             public void actionPerformed(ActionEvent evt) {
    275                 cancelActionPerformed(evt);
    276             }
    277         });
    278 
    279         // 颜色选择按钮
    280         chose = new JButton();
    281         getContentPane().add(chose);
    282         chose.setText("颜色");
    283         chose.setBounds(287, 265, 67, 20);
    284         chose.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12));
    285         chose.addActionListener(new ActionListener() {
    286             public void actionPerformed(ActionEvent evt) {
    287                 choseActionPerformed(evt);
    288             }
    289         });// -------------------------------------------------------------------------
    290     }
    291 
    292     private void setWindowPos() {// 窗口居中
    293         Toolkit kit = Toolkit.getDefaultToolkit();// 抽象类,通过静态方法获取实例
    294         Dimension frameSize = new Dimension(), screenSize = kit.getScreenSize(); // 获取屏幕的大小
    295         getSize(frameSize); // 获取窗口大小
    296         setLocation((screenSize.width - frameSize.width) / 2,
    297                 (screenSize.height - frameSize.height) / 2);
    298     }
    299 
    300     private void nameLtMouseClicked(MouseEvent evt) {// 字体逻辑名列表的鼠标单击事件
    301         nameTx.setText(nameLt.getSelectedValue().toString());
    302         font = new Font(nameTx.getText(), font.getStyle(), font.getSize());
    303         presTx.setFont(font);
    304     }
    305 
    306     private void styleLtMouseClicked(MouseEvent evt) {// 字体样式列表的鼠标单击事件
    307         String temp = styleLt.getSelectedValue().toString();
    308         styleTx.setText(temp);
    309         int index = 0;
    310         while (index < 4 && !fontStyleSet[index].equals(temp)) {
    311             index++;
    312         }
    313         font = new Font(font.getName(), fontCon[index], font.getSize());
    314         presTx.setFont(font);
    315     }
    316 
    317     private void sizeLtMouseClicked(MouseEvent evt) {// 字体大小列表的鼠标点击事件
    318         sizeTx.setText(sizeLt.getSelectedValue().toString());
    319         font = new Font(font.getName(), font.getStyle(),
    320                 Integer.parseInt(sizeTx.getText()));
    321         presTx.setFont(font);
    322     }
    323 
    324     private void approveActionPerformed(ActionEvent evt) {// 确定按钮的触发事件
    325         String name = nameTx.getText();
    326         int style = fontCon[styleLt.getSelectedIndex()];
    327         int size = Integer.parseInt(sizeTx.getText());
    328         font = new Font(name, style, size);
    329         frame.setFont(font); // 父窗口的Font对象
    330         newFont = font;// 更新原来保存格式
    331         newColor = color;// 更新颜色
    332         this.dispose();
    333     }
    334 
    335     private void cancelActionPerformed(ActionEvent evt) {// 取消按钮的触发事件
    336         this.dispose();
    337     }
    338 
    339     private void choseActionPerformed(ActionEvent evt) {// 颜色选择触发事件
    340         if (colorDlg == null) {
    341             colorDlg = JColorChooser.createDialog(FontFormat.this,
    342                     "Select Text Color", true, colorChoose,
    343                     new ColorOKListener(), null);
    344         }
    345         colorChoose.setColor(color = presTx.getForeground());
    346         colorDlg.setVisible(true);
    347     }
    348 
    349     class ColorOKListener implements ActionListener {// 重写颜色按钮点击监听类覆盖接口ActionListener
    350         public void actionPerformed(ActionEvent e) {
    351             Color c = colorChoose.getColor();
    352             color = c;
    353             presTx.setForeground(c);
    354             presTx.repaint();
    355         }
    356     }
    357 }
  • 相关阅读:
    Game Engine Architecture 3
    Game Engine Architecture 2
    补码
    工厂模式
    Game Engine Architecture 1
    YDWE Keynote
    3D Math Keynote 4
    3D Math Keynote 3
    3D Math Keynote 2
    OGRE中Any 类型的实现
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3554815.html
Copyright © 2011-2022 走看看