今天我们来尝试写一段代码,编写一个简单的文本编辑器,一起来看看吧!
首先我们需要用到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,初始值50private 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);//将字体大小文本加入JPaneladd(Topjlabel);//设置字体大小组件位置Topjlabel.setBounds(100, 20, 200, 50);//设置字体大小组件字体样式Topjlabel.setFont(f1);//将字体大小单选按钮加入按钮组btngroup.add(rbt1);btngroup.add(rbt2);btngroup.add(rbt3);//将字体大小按钮加入JPaneladd(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);//将多行文本区域加入JPaneladd(textarea);//设置多行文本区域起始位置textarea.setBounds(0, 90, 1000, 400);//设置多行文本区域内的字体textarea.setFont(f2);//添加字体颜色组件到JPaneladd(Bottomjlabel);//设置字体颜色组件位置Bottomjlabel.setBounds(100, 510, 200, 50);//设置字体颜色组件的字体Bottomjlabel.setFont(f1);//将字体颜色单选按钮加入按钮组btngroup2.add(rbt4);btngroup2.add(rbt5);btngroup2.add(rbt6);//将字体颜色单选按钮加入JPaneladd(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);//将滑动标签文本加入JPaneladd(Bottomjlabel2);//设置滑动标签文本位置Bottomjlabel2.setBounds(100, 580, 150, 50);//设置滑动标签文本的字体Bottomjlabel2.setFont(f1);//将‘滑块的值是’文本加入JPaneladd(Bottomcenterjlabel);//设置‘滑块的值是’文本位置Bottomcenterjlabel.setBounds(300, 580, 200, 50);//设置‘滑块的值是’文本的字体Bottomcenterjlabel.setFont(f1);//将滑块加入JPaneladd(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);//将‘十六进制’文本加入JPaneladd(transformtoRGB);//设置‘十六进制’文本位置transformtoRGB.setBounds(100, 650, 150, 50);//设置‘十六进制’文本字体transformtoRGB.setFont(f1);//将十六进制单行文本框加入JPaneladd(jtextfield);//设置十六进制单行文本框位置jtextfield.setBounds(250, 650, 120, 50);//设置十六进制单行文本框字体jtextfield.setFont(f1);//将转换按钮加入JPaneladd(jbtn);//设置转换按钮位置jbtn.setBounds(400, 650, 100, 50);//设置转换按钮字体jbtn.setFont(f1);//设置转换按钮的事件监听为ActionListenerjbtn.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);//将转换按钮加入JPaneladd(RGBbutton);//设置转换按钮位置RGBbutton.setBounds(550, 720, 100, 50);//设置转换按钮字体RGBbutton.setFont(f1);//设置转换按钮的事件监听为ActionListenerRGBbutton.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()){ //设置文字大小为10size = 10;}if (rbt2.isSelected()){ //设置文字大小为30size = 30;}if (rbt3.isSelected()){ //设置文字大小为50size = 50;}if(rbt4.isSelected()){textarea.setForeground(Color.RED); //设置文字前景色(文字颜色)为红色}if(rbt5.isSelected()){textarea.setForeground(Color.YELLOW); //设置文字前景色(文字颜色)为黄色}if(rbt6.isSelected()){textarea.setForeground(Color.BLUE); //设置文字前景色(文字颜色)为蓝色}//设置多行文本区域文字大小为sizeFont 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); //设置弹窗是否可见}}}//十六进制转Rpublic 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;}//十六进制转Gpublic 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;}//十六进制转Bpublic 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}}
最后展示代码运行成果!

本人是Java的初学者,发布此文章也是希望能够帮助到更多的人,如有错误希望各位大佬能够为我批评指正!感谢各位的支持!


















