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可以继续关注本站。
0
投稿
猜你喜欢
- 在现在的项目中,较多的使用到二维码,前面介绍过一篇使用Gma生成二
- 有这么一种应用场景:你是做前端或APP开发的,需要调用服务端提供的接口,接口只能在公司内网访问;在公司外就无法调试代码了。想在公司外访问怎么
- 0x01 创建要转换的类和主函数注意这里一定要实现序列化package day1; import java.io.Serializable;
- 闲来无事,刚学会把git部署到远程服务器,没事做,所以简单做了一个抓取网页信息的小工具,里面的一些数值如果设成参数的话可能扩展性能会更好!希
- 把char数组转换成String调用reverseStr()传入一个字符串"let’s"
- 现象说明maven的java项目,测试用例和main所在的源码文件均符合缺省写法和格式,但是在使用mvn clean sonar:sonar
- 第一种方法string s=abcdeabcdeabcde;string[] sArray=s.Split('c') ;fo
- 利用Android的ApiDemos的Rotate3dAnimation实现了个图片3D旋转的动画,围绕Y轴进行旋转,还可以实现Z轴的缩放。
- JavaFx初探一,UI控件的使用,具体内容如下方式一:使用纯代码直接new view控件,这样就不涉及到与fxml文件之间的交互了方式二:
- preHandle: 预先处理,在目标的controller方法执行之前,进行处理postHandle: 在目标的con
- 1. 最小生成树连通图中的每一棵生成树 , 都是原图的极大无环子图 , 即: 从中删去任何一条边 , 生成树就不再连通;反之 , 在其中引入
- 基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的!Apple.javapackage strategy;/**
- 今天被数据大神说了,对接第三方接口返回的json字段我想用驼峰形式,他说我这样不专业。所以就改了,认怂。记住以后再次对接rest接口,返回的
- java 方法签名,我想做java 开发的朋友也知道,方法签名的重要性,是方法重载的一个比较好的解释,尤其是在后续优化方面,这里记录下,有看
- Java 常量池的实例详解Java的常量池中包含了类、接口、方法、字符串等一系列常量值。常量池在编译期间就已经确定,并保存在*.class文
- dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源工具。可以在这个地址ht
- RestTemplate第一次请求响应速度较慢问题使用RestTemplate请求微信的接口发现第一次请求需要8秒左右的时间,查阅了JDK资
- 上一节我们完成了使用DataGrid显示所有商品信息,这节我们开始添加几个功能:添加、更新、删除和查询。首先我们实现下前台的显示,然后再做后
- FeignClient发送post请求异常这个问题其实很基础。但是却难倒了我。记录一下在发送post请求的时候要指定消息格式正确的写法是这样
- 一、研究背景在我们实际的项目开发中,我们会经常对文件进行相关任务的操作,具体的开发环节中,免不了让我们获取文件的后缀名,通过后缀名来进行下一