软件编程
位置:首页>> 软件编程>> java编程>> java实现仿windows 字体设置选项卡实例

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

作者:beautifulzzzz  发布时间:2023-01-02 11:45:42 

标签:java,选项卡

想用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仿windows 字体设置选项卡内容就给大家介绍到这里了。希望大家继续关注我们的网站!想要学习java可以继续关注本站。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com