(JAVA)利用GUI编写简单文本编辑器

前言

今天我们来尝试写一段代码,编写一个简单的文本编辑器,一起来看看吧!

首先我们需要用到Java中的继承(extends)、接口(implements)。我们将其分为两个文件:一个文件中是所有的布局和逻辑;另一个文件中是GUI中最基本的框架(JFrame)。

布局方面,我选择了方便却需要较多设置的空布局(NullLayout)。

用到的组件有:标签(JLabel)、滑块(JSlider)、单行文本框(JTextField)、多行文本框(JTextArea)、按钮(JButton)、按钮组(JButtonGroup)、单选按钮(JRadioButton)、字体(Font)和提示框(JDialog)。

用到的事件监听器有: ItemListener 、ChangeListener 和 ActionListener 。

接下来,我们一起看看代码吧!

import java.awt.*;      
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class NullLayout extends JFrame implements ItemListener, ChangeListener, ActionListener{
	/**
	 * 设置serialVersionUID属性,防止编译器警告序列化NullLayout没有声明serialVersionUID
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * @param 这部分为成员变量设置
	 */
	private JLabel Topjlabel = new JLabel("字体大小");
	private JLabel Bottomjlabel = new JLabel("字体颜色");
	private JLabel Bottomjlabel2 = new JLabel("滑动标签");
	//↓↓↓↓↓↓↓↓这两行顺序不可改变,slider对象应在初始化后调用
	private JSlider slider = new JSlider();			//Slider默认最小值0,最大值100,初始值50
	private JLabel Bottomcenterjlabel = new JLabel("滑块的值是"+slider.getValue());
	//↑↑↑↑↑↑↑↑这两行顺序不可改变,slider对象应在初始化后调用
	private JLabel transformtoRGB = new JLabel("十六进制:");
	private JLabel useRGB_R = new JLabel("R");
	private JLabel useRGB_G = new JLabel("G");
	private JLabel useRGB_B = new JLabel("B");
	private JLabel prompt = new JLabel("      请输入7位16进制色彩代码");
	private JLabel prompt2 = new JLabel("请输入正确的sRGB色彩(要求RGB在0~255)");
	private JTextField R = new JTextField("255",3);
	private JTextField G = new JTextField("255",3);
	private JTextField B = new JTextField("255",3);
	private JTextField jtextfield = new JTextField("#000000",7);
	private JButton RGBbutton = new JButton("转换");
	private JButton jbtn = new JButton("转换");
	private ButtonGroup btngroup = new ButtonGroup();
	private ButtonGroup btngroup2 = new ButtonGroup();
	private JRadioButton rbt1 = new JRadioButton("小号");
	private JRadioButton rbt2 = new JRadioButton("中号");
	private JRadioButton rbt3 = new JRadioButton("大号");
	private JRadioButton rbt4 = new JRadioButton("红色");
	private JRadioButton rbt5 = new JRadioButton("黄色");
	private JRadioButton rbt6 = new JRadioButton("蓝色");
	private JTextArea textarea = new JTextArea("在此输入文本...",20,20);
	private Font f1 = new Font("仿宋",Font.BOLD,25);
	private Font f2 = new Font("仿宋",Font.PLAIN,25);
	private JDialog jdialog = new JDialog(this,"提示",true);
	private JDialog jdialog2 = new JDialog(this,"提示",true);
	/**
	 * @param 成员变量设置完毕
	 */
	//构造器
	public NullLayout(String title){
		super(title);		//调用父类一参构造器,并初始化JFrame的标题为"简单文本编辑器"。
		init();		//为防止构造器内容过多,调用外部函数
	}
	//构造器内部分,为防止构造器内代码过长,通过调用函数实现
	public void init(){
		//设置布局为空布局
		setLayout(null);
		//设置窗口大小不可改变
		setResizable(false);
		//将字体大小文本加入JPanel
		add(Topjlabel);
		//设置字体大小组件位置
		Topjlabel.setBounds(100, 20, 200, 50);
		//设置字体大小组件字体样式
		Topjlabel.setFont(f1);
		//将字体大小单选按钮加入按钮组
		btngroup.add(rbt1);
		btngroup.add(rbt2);
		btngroup.add(rbt3);
		//将字体大小按钮加入JPanel
		add(rbt1);
		add(rbt2);
		add(rbt3);
		//设置字体大小按钮的位置
		rbt1.setBounds(400, 20, 200, 50);
		rbt2.setBounds(600, 20, 200, 50);
		rbt3.setBounds(800, 20, 200, 50);
		//设置字体大小单选按钮的字体
		rbt1.setFont(f1);
		rbt2.setFont(f1);
		rbt3.setFont(f1);
		//将字体大小按钮加入ItemListener监听器
		rbt1.addItemListener(this);
		rbt2.addItemListener(this);
		rbt3.addItemListener(this);
		//将多行文本区域加入JPanel
		add(textarea);
		//设置多行文本区域起始位置
		textarea.setBounds(0, 90, 1000, 400);
		//设置多行文本区域内的字体
		textarea.setFont(f2);
		//添加字体颜色组件到JPanel
		add(Bottomjlabel);
		//设置字体颜色组件位置
		Bottomjlabel.setBounds(100, 510, 200, 50);
		//设置字体颜色组件的字体
		Bottomjlabel.setFont(f1);
		//将字体颜色单选按钮加入按钮组
		btngroup2.add(rbt4);
		btngroup2.add(rbt5);
		btngroup2.add(rbt6);
		//将字体颜色单选按钮加入JPanel
		add(rbt4);
		add(rbt5);
		add(rbt6);
		//设置字体颜色按钮的位置
		rbt4.setBounds(400, 510, 200, 50);
		rbt5.setBounds(600, 510, 200, 50);
		rbt6.setBounds(800, 510, 200, 50);
		//设置字体颜色按钮组的字体
		rbt4.setFont(f1);
		rbt5.setFont(f1);
		rbt6.setFont(f1);
		//将字体颜色按钮加入ItemListener监听器
		rbt4.addItemListener(this);
		rbt5.addItemListener(this);
		rbt6.addItemListener(this);
		//将滑动标签文本加入JPanel
		add(Bottomjlabel2);
		//设置滑动标签文本位置
		Bottomjlabel2.setBounds(100, 580, 150, 50);
		//设置滑动标签文本的字体
		Bottomjlabel2.setFont(f1);
		//将‘滑块的值是’文本加入JPanel
		add(Bottomcenterjlabel);
		//设置‘滑块的值是’文本位置
		Bottomcenterjlabel.setBounds(300, 580, 200, 50);
		//设置‘滑块的值是’文本的字体
		Bottomcenterjlabel.setFont(f1);
		//将滑块加入JPanel
		add(slider);
		//设置滑块位置
		slider.setBounds(550, 580, 300, 50);
		//设置滑块主要刻度间距
		slider.setMajorTickSpacing(10);
		//设置滑块次要刻度间距
		slider.setMinorTickSpacing(5);
		//绘制滑块标签
		slider.setPaintLabels(true);
		//绘制滑块刻度标记
		slider.setPaintTicks(true);
		//绘制滑块滑道
		slider.setPaintTrack(true);
		//将滑块加入ChangeListener监听器
		slider.addChangeListener(this);
		//将‘十六进制’文本加入JPanel
		add(transformtoRGB);
		//设置‘十六进制’文本位置
		transformtoRGB.setBounds(100, 650, 150, 50);
		//设置‘十六进制’文本字体
		transformtoRGB.setFont(f1);
		//将十六进制单行文本框加入JPanel
		add(jtextfield);
		//设置十六进制单行文本框位置
		jtextfield.setBounds(250, 650, 120, 50);
		//设置十六进制单行文本框字体
		jtextfield.setFont(f1);
		//将转换按钮加入JPanel
		add(jbtn);
		//设置转换按钮位置
		jbtn.setBounds(400, 650, 100, 50);
		//设置转换按钮字体
		jbtn.setFont(f1);
		//设置转换按钮的事件监听为ActionListener
		jbtn.addActionListener(this);
		/**将‘R,G,B’加入JPanel
		 * 设置‘R,G,B’位置
		 * 设置‘R,G,B'字体
		 */
		add(useRGB_R);
		useRGB_R.setBounds(105, 720, 20, 50);
		useRGB_R.setFont(f1);
		add(useRGB_G);
		useRGB_G.setBounds(250, 720, 20, 50);
		useRGB_G.setFont(f1);
		add(useRGB_B);
		useRGB_B.setBounds(400, 720, 20, 50);
		useRGB_B.setFont(f1);
		/**将‘R,G,B’文本框加入JPanel
		 * 设置‘R,G,B’文本框位置
		 * 设置‘R,G,B’文本框字体
		 */
		add(R);
		R.setBounds(150, 720, 80, 50);
		R.setFont(f1);
		add(G);
		G.setBounds(300, 720, 80, 50);
		G.setFont(f1);
		add(B);
		B.setBounds(450, 720, 80, 50);
		B.setFont(f1);
		//将转换按钮加入JPanel
		add(RGBbutton);
		//设置转换按钮位置
		RGBbutton.setBounds(550, 720, 100, 50);
		//设置转换按钮字体
		RGBbutton.setFont(f1);
		//设置转换按钮的事件监听为ActionListener
		RGBbutton.addActionListener(this);
		jdialog.setSize(500,250);
		Container con = jdialog.getContentPane();
		prompt.setFont(f1);
		con.add(prompt);
		jdialog2.setSize(500,250);
		Container con2 = jdialog2.getContentPane();
		prompt2.setFont(f1);
		con2.add(prompt2);
	}
	//事件监听函数,用于监听单选按钮的发生
	public void itemStateChanged(ItemEvent e){
	    int size = 25;
	    if (rbt1.isSelected()){			//设置文字大小为10
	    	size = 10;
	    }
	    if (rbt2.isSelected()){			//设置文字大小为30
	    	size = 30;
	    }
	    if (rbt3.isSelected()){			//设置文字大小为50
	    	size = 50;
	    }
	    if(rbt4.isSelected()){
	    	textarea.setForeground(Color.RED);		//设置文字前景色(文字颜色)为红色
	    }
		if(rbt5.isSelected()){
			textarea.setForeground(Color.YELLOW);	//设置文字前景色(文字颜色)为黄色
		}
		if(rbt6.isSelected()){
			textarea.setForeground(Color.BLUE);		//设置文字前景色(文字颜色)为蓝色
		}
		//设置多行文本区域文字大小为size
	    Font font = new Font("仿宋", Font.PLAIN, size);
	    textarea.setFont(font);
	}
	//事件监听函数,用于监听滑块动作,并更改字体大小以及数字显示
	public void stateChanged(ChangeEvent e){
		if(e.getSource() == slider){
		//更改数字显示
		Bottomcenterjlabel.setText("滑块的值是"+slider.getValue());
		//更改字体大小
		Font font = new Font("仿宋",Font.PLAIN,slider.getValue());
		textarea.setFont(font);
		}
	}
	//动作事件
	public void actionPerformed(ActionEvent e){
		/**触发按钮jbtn时更改文字前景颜色
		 * (transform16To_R/G/B为十六进制转sRGB函数)
		 */
		if(e.getSource() == jbtn){
			if(jtextfield.getText().length() == 7){
				Color color = new Color(transform16To_R(jtextfield.getText()),transform16To_G(jtextfield.getText()),transform16To_B(jtextfield.getText()));
				textarea.setForeground(color);
			}else{
				/**此处十六进制代码只需判断JTextField中得到的字符串长度为7。
				 * 满足:返回字体颜色;不满足:返回弹窗
				 */
				jdialog.setLocation(550,350);		//设置弹窗位置
				jdialog.setVisible(true);			//设置弹窗是否可见
			}
			
		}
		if(e.getSource() == RGBbutton){
			/**此处sRGB值需要判断每个JTextField是否为0~255之间的值。
			 * 满足:返回字体颜色;不满足:返回弹窗
			 */
			if((Integer.parseInt(R.getText())>=0 && Integer.parseInt(R.getText())<=255)&&(Integer.parseInt(G.getText())>=0 && Integer.parseInt(G.getText())<=255)&&(Integer.parseInt(B.getText())>=0 && Integer.parseInt(B.getText())<=255)){
				Color color = new Color(Integer.parseInt(R.getText()),Integer.parseInt(G.getText()),Integer.parseInt(B.getText()));
				textarea.setForeground(color);
			}else{
				jdialog2.setLocation(550,350);		//设置弹窗位置
				jdialog2.setVisible(true);			//设置弹窗是否可见
			}
		}
	}
	//十六进制转R
	public int transform16To_R(String RGB){
		if(RGB != null && !"".equals(RGB) && RGB.length() == 7){
			//截取十六进制字符串第1,2位,并将其转换为sRGB中R型整数
			int R = Integer.valueOf(RGB.substring( 1, 3 ), 16);
			//返回R型整数
			return R;
		}
		return 0;
	}
	//十六进制转G
	public int transform16To_G(String RGB){
		if(RGB != null && !"".equals(RGB) && RGB.length() == 7){
			//截取十六进制字符串第3,4位,并将其转换为sRGB中G型整数
			int G = Integer.valueOf(RGB.substring( 3, 5 ), 16);
			//返回G型整数
			return G;
		}
		return 0;
	}
	//十六进制转B
	public int transform16To_B(String RGB){
		if(RGB != null && !"".equals(RGB) && RGB.length() == 7){
			//截取十六进制字符串第5,6位,并将其转换为sRGB中B型整数
			int B = Integer.valueOf(RGB.substring( 5, 7 ), 16);
			//返回B型整数
			return B;
		}
		return 0;
	}
}

下面是主函数部分:

import javax.swing.*; 

public class Main {

	public static void main(String[] args) {
		NullLayout frame = new NullLayout("简单文本编辑器");
		frame.setLocation(300, 50);			//设置JFrame窗体位置
		frame.setSize(1000, 850);			//设置JFrame窗体大小
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		//设置JFrame窗体关闭时为直接结束程序进程
		frame.setVisible(true);				//设置JFrame窗体是否可见,默认false
	}

}

最后展示代码运行成果!

在这里插入图片描述

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

一、Python入门

下面这些内容是Python各个应用方向都必备的基础知识,想做爬虫、数据分析或者人工智能,都得先学会他们。任何高大上的东西,都是建立在原始的基础之上。打好基础,未来的路会走得更稳重。所有资料文末免费领取!!!

包含:

计算机基础

在这里插入图片描述

python基础

在这里插入图片描述

Python入门视频600集:

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

二、Python爬虫

爬虫作为一个热门的方向,不管是在自己兼职还是当成辅助技能提高工作效率,都是很不错的选择。

通过爬虫技术可以将相关的内容收集起来,分析删选后得到我们真正需要的信息。

这个信息收集分析整合的工作,可应用的范畴非常的广泛,无论是生活服务、出行旅行、金融投资、各类制造业的产品市场需求等等,都能够借助爬虫技术获取更精准有效的信息加以利用。

在这里插入图片描述

Python爬虫视频资料

在这里插入图片描述

三、数据分析

清华大学经管学院发布的《中国经济的数字化转型:人才与就业》报告显示,2025年,数据分析人才缺口预计将达230万。

这么大的人才缺口,数据分析俨然是一片广阔的蓝海!起薪10K真的是家常便饭。

在这里插入图片描述

四、数据库与ETL数仓

企业需要定期将冷数据从业务数据库中转移出来存储到一个专门存放历史数据的仓库里面,各部门可以根据自身业务特性对外提供统一的数据服务,这个仓库就是数据仓库。

传统的数据仓库集成处理架构是ETL,利用ETL平台的能力,E=从源数据库抽取数据,L=将数据清洗(不符合规则的数据)、转化(对表按照业务需求进行不同维度、不同颗粒度、不同业务规则计算进行统计),T=将加工好的表以增量、全量、不同时间加载到数据仓库。

在这里插入图片描述

五、机器学习

机器学习就是对计算机一部分数据进行学习,然后对另外一些数据进行预测与判断。

机器学习的核心是“使用算法解析数据,从中学习,然后对新数据做出决定或预测”。也就是说计算机利用以获取的数据得出某一模型,然后利用此模型进行预测的一种方法,这个过程跟人的学习过程有些类似,比如人获取一定的经验,可以对新问题进行预测。

在这里插入图片描述

机器学习资料:

在这里插入图片描述

六、Python高级进阶

从基础的语法内容,到非常多深入的进阶知识点,了解编程语言设计,学完这里基本就了解了python入门到进阶的所有的知识点。

在这里插入图片描述

到这就基本就可以达到企业的用人要求了,如果大家还不知道去去哪找面试资料和简历模板,我这里也为大家整理了一份,真的可以说是保姆及的系统学习路线了。

在这里插入图片描述
但学习编程并不是一蹴而就,而是需要长期的坚持和训练。整理这份学习路线,是希望和大家共同进步,我自己也能去回顾一些技术点。不管是编程新手,还是需要进阶的有一定经验的程序员,我相信都可以从中有所收获。

一蹴而就,而是需要长期的坚持和训练。整理这份学习路线,是希望和大家共同进步,我自己也能去回顾一些技术点。不管是编程新手,还是需要进阶的有一定经验的程序员,我相信都可以从中有所收获。

资料领取

这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以点击下方CSDN官方认证微信卡片免费领取 ↓↓↓【保证100%免费】

在这里插入图片描述

好文推荐

了解python的前景:https://blog.csdn.net/SpringJavaMyBatis/article/details/127194835

了解python的兼职副业:https://blog.csdn.net/SpringJavaMyBatis/article/details/127196603

猜你喜欢

转载自blog.csdn.net/weixin_49892805/article/details/132038903