这里有新鲜出炉的Java函数式编程,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
本篇文章介绍了java仿windows 字体设置选项卡,可实现类似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可以继续关注本站。
来源: http://www.phperz.com/article/17/1125/359681.html