java实现仿windows 字体设置选项卡实例

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

package 实验;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
import javax.swing.border.BevelBorder;

/**
 * 字体格式设置对话框
 */

public class FontFormat extends JDialog {

  private JLabel nameLb;
  private JLabel styleLb;
  private JLabel sizeLb;
  private JLabel presLb;
  private JTextField nameTx;
  private JTextField styleTx;
  private JTextField sizeTx;
  private JTextField presTx;
  private JList nameLt;
  private JList styleLt;
  private JList sizeLt;
  private JScrollPane jScrollPane1;
  private JScrollPane jScrollPane2;
  private JScrollPane jScrollPane3;
  private JButton approve;
  private JButton cancel;
  private JButton chose;
  private JRadioButton[] language = new JRadioButton[2];
  private ButtonGroup languageg;
  private String Slanguage[] = { new String("李涛"), new String("ABC") };

  private static JFrame frame;
  public Font font, newFont;// 字体类
  private Color color;// 颜色类
  Color newColor;

  private JFileChooser fileChoose = new JFileChooser();// 文件选择类实例
  private JDialog colorDlg;// 颜色对话框
  private JColorChooser colorChoose = new JColorChooser();// 颜色选择类实例

  private GraphicsEnvironment environment; // 该类中又获取系统字体的方法;
  private String[] fontNameSet;// 字体‘逻辑名'集
  // 字体‘样式'集的字符串数组
  private String[] fontStyleSet = { "常规", "倾斜", "加粗", "倾斜 加粗" };
  // 字体‘样式'集的常量数组
  private Integer[] fontCon = { Font.PLAIN, Font.ITALIC, Font.BOLD,
      Font.BOLD | Font.ITALIC };
  // 字体‘大小'集
  private String[] fontSizeSet = { "6", "7", "8", "9", "10", "11", "12",
      "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72" };

  public static void main(String args[]) {// 主函数
    FontFormat a = new FontFormat();
    a.setVisible(true);
  }

  public FontFormat() {// 无参构造函数
    super(frame, "李涛—字体设置窗口", true);
    frame = new JFrame();
    initGUI();
  }

  public FontFormat(JFrame frame) {// 含参构造函数
    super(frame, "李涛—字体设置窗口", true);
    this.frame = frame;// 父窗口中必须有一个public的Font对象
    // setAlwaysOnTop(true);
    initGUI();
  }

  private void initGUI() {// 字体格式选择器的界面初始化
    try {
      getContentPane().setLayout(null);
      environment = GraphicsEnvironment.getLocalGraphicsEnvironment();// GraphicsEnvironment是一个抽象类,不能实例化,只能用其中的静态方法获取一个实例
      fontNameSet = environment.getAvailableFontFamilyNames();// 获取系统字体
      addMenu();// 加入菜单
      initFont();// 初始化字体
      // pack();
      setSize(380, 337);
      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
      setWindowPos();// 使窗口屏幕居中
      setResizable(false);// 大小不可变
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private void initFont() {// 初始化字体
    // 设置默认字体格式为父窗口font对向的字体格式
    if (frame.getFont() == null) {
      nameTx.setText(fontNameSet[0]);
      styleTx.setText(fontStyleSet[0]);
      sizeTx.setText("12");
      nameLt.setSelectedValue(fontNameSet[0], true);
      styleLt.setSelectedIndex(0);
      sizeLt.setSelectedValue("12", true);
      font = new Font(fontNameSet[0], fontCon[0], 12);
      newFont = font;// 保存原来的字体格式
      presTx.setFont(font);
      // JOptionPane.showMessageDialog(null, "ccac");
    } else {
      int idxStyle = 0;
      for (int i = 0; i < fontCon.length; i++) {
        if (fontCon[i] == frame.getFont().getStyle())
          idxStyle = i;
      }
      nameTx.setText(frame.getFont().getName());// 改text
      styleTx.setText(fontStyleSet[idxStyle]);
      sizeTx.setText("" + frame.getFont().getSize());
      nameLt.setSelectedValue(frame.getFont().getName(), true);// 改list显示
      styleLt.setSelectedIndex(idxStyle);
      sizeLt.setSelectedValue("" + frame.getFont().getSize(), true);
      font = new Font(fontNameSet[0], fontCon[0], 12);// 保存当前格式
      newFont = font;// 保存原来的字体格式
      presTx.setFont(font);// 预览中设为当前模式
    }
  }

  private void addMenu() {// 加入菜单
    // 4个lable---------------------------------------------------------------------------------
    nameLb = new JLabel();
    getContentPane().add(nameLb);
    nameLb.setText("字体:");
    nameLb.setBounds(10, 14, 120, 26);
    nameLb.setFont(new java.awt.Font("SimSun", 1, 14));

    styleLb = new JLabel();
    getContentPane().add(styleLb);
    styleLb.setText("字型:");
    styleLb.setBounds(151, 14, 120, 23);
    styleLb.setFont(new java.awt.Font("SimSun", 1, 14));

    sizeLb = new JLabel();
    getContentPane().add(sizeLb);
    sizeLb.setText("大小:");
    sizeLb.setBounds(275, 14, 79, 24);
    sizeLb.setFont(new java.awt.Font("SimSun", 1, 14));

    presLb = new JLabel();
    getContentPane().add(presLb);
    presLb.setText("预览:");
    presLb.setBounds(151, 150, 120, 80);
    presLb.setFont(new java.awt.Font("SimSun", 1, 14));

    // 4个textfield---------------------------------------------------------------------------------
    nameTx = new JTextField();
    nameTx.setEditable(false);
    getContentPane().add(nameTx);
    nameTx.setBounds(10, 42, 120, 22);

    styleTx = new JTextField();
    styleTx.setEditable(false);
    getContentPane().add(styleTx);
    styleTx.setBounds(151, 42, 100, 21);

    sizeTx = new JTextField();
    sizeTx.setEditable(false);
    getContentPane().add(sizeTx);
    sizeTx.setBounds(275, 42, 79, 22);

    presTx = new JTextField();
    presTx.setEditable(false);
    getContentPane().add(presTx);
    presTx.setBounds(151, 200, 203, 61);
    presTx.setText(Slanguage[1]);

    // 3个下拉条--+监听-----------------------------------------------------------------------------
    jScrollPane1 = new JScrollPane();
    getContentPane().add(jScrollPane1);
    jScrollPane1.setBounds(10, 74, 120, 210);
    {
      ListModel fontNameModel = new DefaultComboBoxModel(fontNameSet);
      nameLt = new JList();
      jScrollPane1.setViewportView(nameLt);
      nameLt.setModel(fontNameModel);
      nameLt.setBounds(274, 193, 90, 86);
      nameLt.setBorder(BorderFactory
          .createEtchedBorder(BevelBorder.LOWERED));
      nameLt.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
          nameLtMouseClicked(evt);
        }
      });
    }

    jScrollPane2 = new JScrollPane();
    getContentPane().add(jScrollPane2);
    jScrollPane2.setBounds(151, 74, 100, 103);
    {
      ListModel fontStyleModel = new DefaultComboBoxModel(fontStyleSet);
      styleLt = new JList();
      jScrollPane2.setViewportView(styleLt);
      styleLt.setModel(fontStyleModel);
      styleLt.setBounds(310, 215, 70, 102);
      styleLt.setBorder(BorderFactory
          .createEtchedBorder(BevelBorder.LOWERED));
      styleLt.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
          styleLtMouseClicked(evt);
        }
      });
    }

    jScrollPane3 = new JScrollPane();
    getContentPane().add(jScrollPane3);
    jScrollPane3.setBounds(275, 75, 79, 100);
    {
      ListModel fontSizeModel = new DefaultComboBoxModel(fontSizeSet);
      sizeLt = new JList();
      jScrollPane3.setViewportView(sizeLt);
      sizeLt.setModel(fontSizeModel);
      sizeLt.setBounds(300, 218, 54, 102);
      sizeLt.setBorder(BorderFactory
          .createEtchedBorder(BevelBorder.LOWERED));
      sizeLt.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
          sizeLtMouseClicked(evt);
        }
      });
    }// -------------------------------------------------------------------------------------

    // 中英选项(---------------------------------------------------------------------------------
    languageg = new ButtonGroup();
    language[0] = new JRadioButton("中");
    getContentPane().add(language[0]);
    language[0].setSelected(false);// 初始化显示
    language[0].setBounds(271, 179, 40, 20);
    language[0].setFont(new java.awt.Font("SimSun", 1, 12));
    languageg.add(language[0]);
    language[0].addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        presTx.setText(Slanguage[0]);
      }
    });

    language[1] = new JRadioButton("英");
    getContentPane().add(language[1]);
    language[1].setSelected(true);
    language[1].setBounds(321, 179, 40, 20);
    language[1].setFont(new java.awt.Font("SimSun", 1, 12));
    languageg.add(language[1]);
    language[1].addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        presTx.setText(Slanguage[1]);
      }
    });

    // 3个按钮+监听---------------------------------------------------------------------------------
    // 确定按钮
    approve = new JButton();
    getContentPane().add(approve);
    approve.setText("确定");
    approve.setBounds(151, 265, 67, 20);
    approve.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12));
    approve.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        approveActionPerformed(evt);
      }
    });

    // 取消按钮
    cancel = new JButton();
    getContentPane().add(cancel);
    cancel.setText("取消");
    cancel.setBounds(219, 265, 67, 20);
    cancel.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12));
    cancel.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        cancelActionPerformed(evt);
      }
    });

    // 颜色选择按钮
    chose = new JButton();
    getContentPane().add(chose);
    chose.setText("颜色");
    chose.setBounds(287, 265, 67, 20);
    chose.setFont(new java.awt.Font("KaiTi_GB2312", 1, 12));
    chose.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        choseActionPerformed(evt);
      }
    });// -------------------------------------------------------------------------
  }

  private void setWindowPos() {// 窗口居中
    Toolkit kit = Toolkit.getDefaultToolkit();// 抽象类,通过静态方法获取实例
    Dimension frameSize = new Dimension(), screenSize = kit.getScreenSize(); // 获取屏幕的大小
    getSize(frameSize); // 获取窗口大小
    setLocation((screenSize.width - frameSize.width) / 2,
        (screenSize.height - frameSize.height) / 2);
  }

  private void nameLtMouseClicked(MouseEvent evt) {// 字体逻辑名列表的鼠标单击事件
    nameTx.setText(nameLt.getSelectedValue().toString());
    font = new Font(nameTx.getText(), font.getStyle(), font.getSize());
    presTx.setFont(font);
  }

  private void styleLtMouseClicked(MouseEvent evt) {// 字体样式列表的鼠标单击事件
    String temp = styleLt.getSelectedValue().toString();
    styleTx.setText(temp);
    int index = 0;
    while (index < 4 && !fontStyleSet[index].equals(temp)) {
      index++;
    }
    font = new Font(font.getName(), fontCon[index], font.getSize());
    presTx.setFont(font);
  }

  private void sizeLtMouseClicked(MouseEvent evt) {// 字体大小列表的鼠标点击事件
    sizeTx.setText(sizeLt.getSelectedValue().toString());
    font = new Font(font.getName(), font.getStyle(),
        Integer.parseInt(sizeTx.getText()));
    presTx.setFont(font);
  }

  private void approveActionPerformed(ActionEvent evt) {// 确定按钮的触发事件
    String name = nameTx.getText();
    int style = fontCon[styleLt.getSelectedIndex()];
    int size = Integer.parseInt(sizeTx.getText());
    font = new Font(name, style, size);
    frame.setFont(font); // 父窗口的Font对象
    newFont = font;// 更新原来保存格式
    newColor = color;// 更新颜色
    this.dispose();
  }

  private void cancelActionPerformed(ActionEvent evt) {// 取消按钮的触发事件
    this.dispose();
  }

  private void choseActionPerformed(ActionEvent evt) {// 颜色选择触发事件
    if (colorDlg == null) {
      colorDlg = JColorChooser.createDialog(FontFormat.this,
          "Select Text Color", true, colorChoose,
          new ColorOKListener(), null);
    }
    colorChoose.setColor(color = presTx.getForeground());
    colorDlg.setVisible(true);
  }

  class ColorOKListener implements ActionListener {// 重写颜色按钮点击监听类覆盖接口ActionListener
    public void actionPerformed(ActionEvent e) {
      Color c = colorChoose.getColor();
      color = c;
      presTx.setForeground(c);
      presTx.repaint();
    }
  }
}

效果如下:

希望本文所述对你有所帮助,java仿windows 字体设置选项卡内容就给大家介绍到这里了。希望大家继续关注我们的网站!想要学习java可以继续关注本站。

(0)

相关推荐

  • Java Swing中的下拉式菜单(menu)、弹出式菜单(JPopupMenu)、选项卡窗体(JTabbedPane)组件使用案例

    菜单是GUI中最常用的组件,菜单不是Component类的子类,不能放置在普通容器中,不受布局管理器的约束,只能放置在菜单栏中. 菜单组件由菜单栏 (MenuBar).菜单(Menu)和菜单项(MenuItem)三部分组成. 一个菜单栏由若干个菜单组成,一个菜单又由若干个菜单项组成.一般菜单栏放 Frame 窗口中,只要调用 Frame 类的 setMenuBar()方法即可. 常用的菜单有:下拉式菜单和弹出式菜单(独立显示,可出现在任意地方). 一:下拉式菜单的创建步骤: 1.创建一个菜单栏.

  • java实现仿windows 字体设置选项卡实例

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

  • Java线程池大小的设置方法实例

    目录 Java 中线程池创建的几种方式

  • JS实现仿Windows经典风格的选项卡Tab切换代码

    本文实例讲述了JS实现仿Windows经典风格的选项卡Tab切换代码.分享给大家供大家参考,具体如下: 这款仿Windows风格的选项卡,带有灰色的立体感,示例内容是用JS控制输出,只是为了演示功能,你在用的时候完全可以去掉的. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-f-windows-style-tab-demo/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T

  • java修改JFrame默认字体方式

    目录 java修改JFrame默认字体 JFrame基本参数设置 java修改JFrame默认字体 修改默认字体的方法很简单.首先我们随便写一个按钮出来: import javax.swing.*; public class Test{ static final int WIDTH = 300; static final int HEIGHT = 200; public static void main(String[] args){ JFrame jf = new JFrame(); jf.s

  • js实现仿Windows风格选项卡和按钮效果实例

    本文实例讲述了js实现仿Windows风格选项卡和按钮效果的方法.分享给大家供大家参考.具体实现方法如下: <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head> <style type="text/css"> <!-- body{ font-family: 'MS Shell Dl

  • Java仿Windows记事本源代码分享

    本文实例为大家分享了Java仿Windows记事本的具体代码,供大家参考,具体内容如下 先上截图: 源代码: import java.awt.*; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.undo.UndoManager; import java.awt.event.*; import java.io.*; /** * * @author cj

  • java仿windows记事本小程序

    本文实例为大家分享了java仿windows记事本小程序的具体代码,供大家参考,具体内容如下 import java.awt.CheckboxMenuItem; import java.awt.Font; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.MenuShortcut; import java.awt.TextA

  • java仿windows记事本功能完整版

    最近学了Java编程,就编了仿windows系统下的记事本练练手,这个记事本实现了windows系统下的大部分功能,只有很少的部分没有实现,比如撤销命令的不完美,这是本人的能力有限,还有那些JMenuItem的是否可用问题,这只是本人比较偷懒,无心再去实现,希望能够与广大的Java爱好者分享我的代码,共同学习进步,我肯定有不足之处,比如有些代码的重复,代码的布置,以及变量的取名问题,希望广大的Java大牛多提宝贵意见,话不多少,直接上代码! package org.mfy.notepad; im

  • Java实现的Windows资源管理器实例

    本文实例讲述了Java实现的Windows资源管理器.分享给大家供大家参考.具体如下: FileTree.java文件如下: // FileTree.java /*********************************************************** * Author: Jason * email: tl21cen@hotmail.com * CSDN blog: http://blog.csdn.net/UnAgain/ *********************

  • 在Windows中设置Python环境变量的实例讲解

    在 Windows 设置环境变量 在环境变量中添加Python目录: 在命令提示框中(cmd) : 输入 path=%path%;C:\Python 按下"Enter". 注意: C:\Python 是Python的安装目录. 也可以通过以下方式设置: • 右键点击"计算机",然后点击"属性" • 然后点击"高级系统设置" • 选择"系统变量"窗口下面的"Path",双击即可! • 然后

随机推荐