150行代码写个低配版WPS?:手把手教你实现+附完整源码

news2025/2/28 3:04:19

前言:通过一个简单实例来实现Java的GUI编程,对于新手较为友好,且有一定的实用性,正在学习Java的同学看过来!!包教包会,如有疑问欢迎私信询问!

目录

实例展示

一、GUI编程基本概念

二、布局方式

三、构建流程

1、编写一个Windows类

 2、功能选择

3、 窗口的构造方法及初始化

3、init()方法的实现

1、布局方式

2、控件初始化

 3、设置布局

4、设置监听器

5、实现监听器:

6、图片文件的选择和插入

四、完整源码


实例展示

 

 

一、GUI编程基本概念

  GUI,即图形用户界面,可以更好的实现用户与软件的交互,而不是单纯的黑色输出界面。既增强了软件的美观性,同时也便于操作。而实现Java的可视化窗口,一般需要导入Swing和AWT两个包来实现,里面包含丰富的相关方法来设置相关控件的属性等。

import javax.swing.*;
import java.awt.*;

二、布局方式

本实例采用Box盒子布局,即将每个组件按照一定顺序和规律进行放置,再进行嵌套!

即把按钮、复选框、菜单、文本域等组件装在一个box里,再将有序的box放置在一个BigBox大盒子里,而最大的则是底层容器!再把BigBox添加进容器即可!

三、构建流程

1、编写一个Windows类

该Wiondow类为static,且实现了监听器,首先对所需的控件进行初始化!

 

 2、功能选择

  • ColorChoice:颜色选择复选框
  • CharacterChoice:字体大小选择复选框
  • Fomat:字体样式选择复选框
  • ShowArea:文本域
  • Box:盒子布局的盒子
  • fileChooser:文件选择器
  • B_Imge:选择图片按钮

3、 窗口的构造方法及初始化

 构造方法,即创建实例后自动运行的一个方法,将窗体初始化方法以及窗体基本性质的设定写在构造方法里。

  1. init()方法实现窗口功能
  2. 设置窗口位置、大小
  3. 设置窗口名称(默认左上角)
  4. 设置窗口关闭时的方法(默认无操作)
  5. 设置窗口为可见

3、init()方法的实现

1、布局方式

        将起始几个盒子设置为水平布局方式,即添加的控件为水平分布

        设置两个盒子为垂直分布,即把三个小box按从上到下的顺序排布

 

2、控件初始化

即实例化控件并初始化:(部分代码)

 

 3、设置布局

即将控件一个个放进对应的盒子中,有序排放:

tips:还需注意间隔,因此Box.createHorizontalStrut()即添加平行距离且为10个像素?

有时是添加垂直距离Box.createVerticalStrut()

4、设置监听器

为控件设置对应的监听器,即选择不同的样式会有什么结果:

 

5、实现监听器:

监听器的实现才是最为关键的部分,通过获取监听源的数据来作出相应的反应,可以简单的用switch语句实现:(更改文本域字体颜色)

6、图片文件的选择和插入

通过Java内置的FileChooser文件选择器,打开一个文件选择窗口来进行文件的选择,并设定为只有Png格式的图片才能插入!

  1. 点击文件选择按钮,触发监听器
  2. 打开文件选择窗口
  3. 选择文件,且扩展名必须为.Png(可更改)
  4. 如果以选择好图片文件,将其添到一个JLable标签内
  5. 将该标签添加到BigBox中即可

其实我尝试过很多设法将图片可以插入文本域内,但是都失败了,只能退而求其次插入到文本域后!

四、完整源码

package FileTree_Test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
public class GUITest_1 {
    public  static void main(String[] args) {
        new Window2() ;
    }
    static class Window2 extends JFrame implements ActionListener {
        private JComboBox<String> ColourChoice, CharacterSize,Format;
        private JTextArea ShowArea;
        private JLabel  tag2, tag3, tag4;
        private Box box2, box3, boxAll,box4, BigBox;
        JFileChooser fileChooser ;
        JButton B_Imge;
        public Window2() {
            init();
            setBounds(400, 400, 360, 350);
            setVisible(true);
            setTitle("WPS简化版");
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            setResizable(true);
        }
        void init() {
            box2 = Box.createHorizontalBox();
            box3 = Box.createHorizontalBox();
            box4=Box.createHorizontalBox();
            boxAll = Box.createVerticalBox();
            BigBox = Box.createVerticalBox();
            setLayout(new FlowLayout());
            tag2 = new JLabel("颜色选择");
            tag3 = new JLabel("字体大小");
            tag4=new JLabel("字体格式");
            Format = new JComboBox();
            ShowArea = new JTextArea(15,15);
            
            ColourChoice = new JComboBox<String>();
            ColourChoice.addItem("红色");
            ColourChoice.addItem("蓝色");
            ColourChoice.addItem("绿色");

            CharacterSize = new JComboBox<String>();
            CharacterSize.addItem("三号");
            CharacterSize.addItem("四号");
            CharacterSize.addItem("五号");

            Format=new JComboBox<String>();
            Format.addItem("华文行楷");
            Format.addItem("幼圆");
            Format.addItem("仿宋");

            B_Imge=new JButton("选择图片");
            fileChooser=new JFileChooser();

            box2.add(tag2);
            box2.add(ColourChoice);
            box3.add(tag3);
            box3.add(CharacterSize);
            box4.add(tag4) ;
            box4.add(Format);
            box4.add(Box.createHorizontalStrut(10));
            box4.add(B_Imge);

            boxAll.add(Box.createVerticalStrut(10));
            boxAll.add(box2);
            boxAll.add(Box.createVerticalStrut(10));
            boxAll.add(box3);
            boxAll.add(Box.createVerticalStrut(10));
            boxAll.add(box4);
            BigBox.add(boxAll);
            BigBox.add(Box.createVerticalStrut(10));
            BigBox.add(ShowArea);
            add(BigBox);
            
            ColourChoice.addActionListener(this);
            CharacterSize.addActionListener(this);
            Format.addActionListener(this);
            B_Imge.addActionListener(this);
        }
        @Override
        public void actionPerformed(ActionEvent e)
        {
            int x = ColourChoice.getSelectedIndex();
            switch (x)
            {
                case 0:
                    ShowArea.setForeground(Color.RED);
                    break;
                case 1:
                    ShowArea.setForeground(Color.blue);
                    break;
                case 2:
                    ShowArea.setForeground(Color.green);
                    break;
                default:ShowArea.setForeground(Color.BLACK);
            }
            int y=CharacterSize.getSelectedIndex();
            int Size;
            switch (y)
            {
                case 0:
                   Size=25;break;
                case 1:
                    Size=20;break;
                case 2:
                    Size=15;break;
                default: Size=10 ;break;
            }
            int z = Format.getSelectedIndex();
            switch (z)
            {
                case 0:
                    ShowArea.setFont(new Font("华文行楷",Font.PLAIN,Size));
                    break;
                case 1:
                    ShowArea.setFont(new Font("幼圆",Font.PLAIN,Size));
                    break;
                case 2:
                    ShowArea.setFont(new Font("仿宋",Font.PLAIN,Size));
                    break;
                default:ShowArea.setFont(new Font("宋体",Font.CENTER_BASELINE,Size));
            }
            if(e.getSource()==B_Imge){
                JFileChooser fileChooser=new JFileChooser();
                fileChooser.showOpenDialog(null);
                File Imgefile=new File(fileChooser.getSelectedFile().getPath());
                JLabel JL=new JLabel(new ImageIcon(Imgefile.getPath()));
                if(Imgefile.getName().endsWith(".png")&&Imgefile!=null){
                    System.out.println("Insert");
                    BigBox.add(JL);
                }
                else System.out.println("False");
            }
        }
    }
}

发文不易,恳请大佬们高抬贵手!


点赞:随手点赞是种美德,是大佬们对于本人创作的认可!


评论:往来无白丁,是你我交流的的开始!


收藏:愿君多采撷,是大佬们对在下的赞赏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java面向对象----抽象类 接口

目录 抽象类与抽象方法 概念 抽象类应用 接 口 概念 接口的特点&#xff1a; 接口应用举例 Java 8中关于接口的改进 内部类 如何声明局部内部类 局部内部类的特点 匿名内部类 总结 抽象类与抽象方法 概念 随着继承层次中一个个新子类的定义&#xff0c;类变得越…

机器学习之多元线性回归

1、多元线性回归模型&#xff1a;定义&#xff1a;具有多个特征的线性回归模型 多元线性回归模型&#xff0c;见下图&#xff1a; 多元线性回归总结&#xff08;参数、模型、损失函数、梯度下降算法&#xff09;见下图&#xff1a;【注意&#xff1a;梯度下降算法每次都是同时…

Vue2中过滤器的用法详解

目录 一、过滤器的概念 二、过滤器的使用位置 三、过滤器的分类 1、全局过滤器 2、本地过滤器 四、过滤器应用实例 1、使用过滤器实现省略号 2、使用过滤器处理时间戳 五、Vue3中已废弃过滤器 过滤器是vue中的一个特性&#xff0c;作用是用于对文本进行格式化的作用。…

动态与静态获取元素

&#x1f335;知识点简介 静态获取&#xff08;querySelectorAll&#xff09;时&#xff0c;选出的所有元素的数组&#xff0c;不会随着文档操作而改变&#xff1b; 动态获取&#xff08;getElementById&#xff09;时&#xff0c;选出的所有元素的数组&#xff0c;会随着文档的…

Paddle 点灯人 之 Tensor

Paddle 点灯人 之 Tensor 文章目录Paddle 点灯人 之 TensorPaddle点灯人介绍Tensor介绍Pytorch和Paddle的相似之处创建张量Tensor图片/文本转TensorDataLoader不需要加ToTensorPaddle中的 Tensor 的属性形状 shape数据类型&#xff08;dtype&#xff09;Tensor 的设备位置&…

高压放大器驱动压电器件工作原理

高压放大器在实际应用中经常会进行电容性负载驱动&#xff0c;对压电器件进行驱动&#xff0c;那么工作原理是什么呢&#xff0c;下面就请安泰电子来为我们讲解一下。 高压放大器是提高信号电压的装置&#xff0c;当负载是谐振电路或者耦合电路的时候&#xff0c;要求特定频率范…

Mybatis源码解析(十):一级缓存和二级缓存

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

转行学python?到底值不值

大学毕业后相当迷茫&#xff0c;不知道做些什么&#xff0c;于是跟着潮流去学了python&#xff0c;当年2w多买的python教程&#xff0c;三个月的时间成功上岸&#xff0c;现在用不着了&#xff0c;文末有领取方式。 面对当前情况&#xff0c;让众多职场人开始紧张&#xff0c;…

《棒球大联盟2nd》:青春赛场·棒球1号位

茂野大吾是个有着现役职业棒球选手的父亲的小学生。他因为向往曾经在棒球大联盟活跃的父亲吾郎&#xff0c;而开始了在少年棒球队“三船海豚队”的棒球训练。但是&#xff0c;因为背负着茂野二世这个称号的压力&#xff0c;无法发挥出原来的水平&#xff0c;以至于1年还不到就放…

基于java+springmvc+mybatis+jsp+mysql的整体衣柜定制系统

项目介绍 管理员后台&#xff1a; 功能&#xff1a;个人中心、客户管理、导购管理、店长管理、厂家管理 客户后台&#xff1a; 功能&#xff1a;个人中心、款式信息管理、款式预订管理、材料信息管理、材料预订管理、定制订单管理、安装信息管理、订单评价管理、联系客户管理 …

我发现了一个React、Vue等所有前端框架都存在的隐秘Bug?

什么 Bug&#xff1f; 昨天有个朋友请教了我一个问题&#xff0c;她在使用原生的 Details 元素封装一个手风琴组件。但是无论如何都不能按照预期工作。 起初我认为是她水平比较差&#xff0c;代码写的有问题。但是她一再向我保证绝对不是她的问题。所以我就抽出时间帮她看了一…

DP2515国产带SPI接口CAN总线控制器芯片兼容替代MCP2515/MCP2515-I/ST

目录什么是CAN&#xff1f;DP2515简介芯片特性参考原理图什么是CAN&#xff1f; CAN是控制器局域网络(Controller Area Network, CAN)的简称&#xff0c;是如今是国际上应用最广泛的现场总线之一&#xff0c;是ISO国际标准化的串行通信协议。在汽车产业中&#xff0c;出于对安…

项目管理必备,教你如何制作甘特图

甘特图是项目管理中常用的工具&#xff0c;又被称为横道图。 由表格和条形图组成&#xff0c;左侧显示项目中所有的任务及时间&#xff0c;右侧一条状进度条显示项目每个任务的进度。 因为它极其好用&#xff0c;不仅在比较大型和复杂的项目中被广泛使用&#xff0c;在日常工…

iPhone 微信多开,如何在苹果手机上安装多个微信,爱思助手怎么用?IPA文件怎么弄?

苹果实现微信多开,用爱思助手就能实现,简单易上手。爱思助手怎么用?IPA文件怎么弄? 设备:Mac(11.6)/14pm 助手:爱思助手 需求:在最新的苹果手机上实现微信多开 博主上个月底抢的14pm终于到手了,之前多开微信一直用的大灰免费版的,怎么说呢?挺好用的但是不稳定,…

简单的有限状态机(FSM)的示例一

一个简单的有限状态机&#xff0c; 三种状态&#xff1a; 停止状态运行状态暂停状态 三个事件 StartPauseStop 状态转换说明&#xff1a; Stopped状态&#xff1a;通过Start事件转换为Running状态Running状态&#xff1a;通过Pause事件可转换为Pause状态Pause状态&#…

什么是零知识证明(ZK Proof)?Web2.0通往Web3.0的入口技术

古老的难题 女&#xff1a;你爱我吗&#xff1f; 男&#xff1a;爱&#xff01; 女&#xff1a;怎么证明&#xff1f; 男&#xff1a;…… 零知识证明的定义 零知识证明(Zero-Knowledge Proof)也叫做最小泄露证明&#xff0c;能充分证明自己是某种权益的合法拥有者&#xff0c…

【Docker】第四章 容器管理

4.1 创建容器常用选项 指令 描述 -i, --interactive 交互式 -t, --tty 分配一个伪终端 -d, --detach 运行容器到后台 -a, --attach list 附加到运行的容器 --dns list 设置DNS服务器 -e, --env list 设置环境变量 --env-file list 从文件读取环境变量 -p, --p…

知识点14--搭建k8s本地测试集群

首先要做安装前的准备&#xff1a; 1、最少三台节点&#xff0c;CentOS 7系统&#xff0c;每台不低于4核4G资源&#xff0c;并配置host域名 [roothdp1 ~] cat /etc/hosts 192.168.88.186 hdp1 192.168.88.187 hdp2 192.168.88.188 hdp32、所有节点保证时间同步、并做SSH互信 …

离散数学与组合数学-数理逻辑-01命题与联结词

文章目录1. 命题与联结词1.1 命题1.2 常用联结词1.3 命题公式1.4 命题的等值演算与推理等价关系式基本等价式1. 命题与联结词 1.1 命题 命题&#xff1a;我们对确定对象做出的陈述句称为命题&#xff08;propositions and statements 命题或陈述&#xff09;。当判断为真时&a…

《小猫猫大课堂》2—开启C语言的世界,喵!

更新不易&#xff0c;麻烦多多点赞&#xff0c;欢迎你的提问&#xff0c;感谢你的转发&#xff0c; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我…