欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-12 21:19:38
想用java做一个像windows里一样的txt编辑软件,涉及到字体设置选项卡,在网上找了很久都没找到,就生气啦自己写一个,现在贴这里分享一下,下次再遇到这样的问题就不用自...

想用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可以继续关注本站。