Java GUI 桌面应用开发
前言
虽然现在已经很少项目会涉及GUI技术,但作为一个合格的Java开发工程师,还是得了解才得
本文记录,idea使用JFormDesigner插件进行Java GUI 桌面应用开发
GUI Swing
图形化的用户界面(Graphical User Interface,简称GUI),java提供了一套可以轻松构建GUI的工具
GUI开发包:
java.awt 包: 主要提供字体/布局管理器
javax.swing 包:主要提供各种组件(窗口/按钮/文本框),商业开发常用
java.awt.event 包:事件处理,后台功能的实现
Swing组件
相对于AWT而言Swing包中提供了更多的丰富的、快捷的、强大的GUI组件
大体上包括以下内容:window顶层容器(窗口)、container中间容器(面板)、component基本组件(按钮、标签等)
JFormDesigner
JFormDesigner,高级Swing GUI设计器,支持MigLayout, JGoodies FormLayout, GroupLayout(自由设计),TableLayout和GridBagLayout,这使得它很容易创建专业外观的表单。
通俗的讲就是使用这个插件进行拖拉布局,快速创建页面,但是这个插件需要购买许可才能使用
破解教程:https://www.cnblogs.com/ylkh/p/13858433.html
1、打开注册机JFormDesigner_Keygen.exe,选择idea plug-in,里面的可以随便填
2、点击Patch,选择已安装的插件,生成bak文件(插件位置idea安装路径\plugins\FormDesigner\)
3、点击generate生成JFormDesigner_license.txt文件
代码编写
创建图形页面,插件会自动同步生成java文件
进行拖拉布局
关键点:
1、顶层容器(JFrame)的Name值要为:this
2、生成的java文件要继承 javax.swing.JFrame
public class TestFrame extends javax.swing.JFrame{
//省略其他代码...
}
3、需要进行单选的RadioButton,要添加同一个Button Group
4、defaultCloseOperation要设置成EXIT,点击X号退出页面时才会退出程序
5、绑定事件,给按钮添加一个actionPerformed即可
6、关闭当前页面:this.dispose(); //退出当前界面
7、代码弹出对话框:JOptionPane.showMessageDialog(null, "恭喜哦,登录成功!");// Message 对话框
生成的java文件
/*
* Created by JFormDesigner on Tue Dec 28 15:24:42 CST 2021
*/ package cn.huanzi.qch.view; import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* 测试
*/
public class TestFrame extends javax.swing.JFrame{
public TestFrame() {
initComponents(); setVisible(true);// 显示
setLocationRelativeTo(null);// JFrame 窗口居中显示
} public static void main(String[] args) {
java.awt.EventQueue.invokeLater(() -> {
new TestFrame();
System.out.println("启动成功!");
});
} private void SubmitActionPerformed(ActionEvent e) {
// TODO add your code here
System.out.println("---------------------------");
System.out.println("姓名:"+userNameTestField.getText());
String sex = "";
if (xyRadioButton.isSelected()) {
sex = "男";
} else if (xxRadioButton.isSelected()) {
sex = "女";
}else if (yyRadioButton.isSelected()) {
sex = "不确定";
}
System.out.println("性别:"+sex);
String hobby = "";
if (singCheckBox.isSelected()) {
hobby += "唱、";
}
if (skipCheckBox.isSelected()) {
hobby += "跳、";
}
if (rapCheckBox.isSelected()) {
hobby += "rap、";
}
System.out.println("爱好:"+hobby);
System.out.println("自我评价:"+selfTextArea.getText());
} private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
label1 = new JLabel();
userNameTestField = new JTextField();
label2 = new JLabel();
label3 = new JLabel();
submit = new JButton();
reset = new JButton();
xxRadioButton = new JRadioButton();
xyRadioButton = new JRadioButton();
yyRadioButton = new JRadioButton();
scrollPane1 = new JScrollPane();
selfTextArea = new JTextArea();
label4 = new JLabel();
label5 = new JLabel();
singCheckBox = new JCheckBox();
skipCheckBox = new JCheckBox();
rapCheckBox = new JCheckBox(); //======== this ========
setBackground(Color.gray);
setTitle("Test GUI");
setForeground(SystemColor.windowText);
setMinimumSize(new Dimension(300, 200));
setResizable(false);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(null); //---- label1 ----
label1.setText("\u59d3\u540d\uff1a");
contentPane.add(label1);
label1.setBounds(34, 55, 65, 30);
contentPane.add(userNameTestField);
userNameTestField.setBounds(119, 55, 200, userNameTestField.getPreferredSize().height); //---- label2 ----
label2.setText("\u6027\u522b\uff1a");
contentPane.add(label2);
label2.setBounds(34, 95, 65, 30); //---- label3 ----
label3.setText("\u81ea\u6211\u8bc4\u4ef7\uff1a");
contentPane.add(label3);
label3.setBounds(34, 165, 65, 30); //---- submit ----
submit.setText("\u63d0\u4ea4");
submit.addActionListener(e -> SubmitActionPerformed(e));
contentPane.add(submit);
submit.setBounds(new Rectangle(new Point(64, 271), submit.getPreferredSize())); //---- reset ----
reset.setText("\u91cd\u7f6e");
contentPane.add(reset);
reset.setBounds(new Rectangle(new Point(219, 271), reset.getPreferredSize())); //---- xxRadioButton ----
xxRadioButton.setText("\u5973");
contentPane.add(xxRadioButton);
xxRadioButton.setBounds(new Rectangle(new Point(184, 100), xxRadioButton.getPreferredSize())); //---- xyRadioButton ----
xyRadioButton.setText("\u7537");
contentPane.add(xyRadioButton);
xyRadioButton.setBounds(new Rectangle(new Point(129, 100), xyRadioButton.getPreferredSize())); //---- yyRadioButton ----
yyRadioButton.setText("\u4e0d\u786e\u5b9a");
contentPane.add(yyRadioButton);
yyRadioButton.setBounds(new Rectangle(new Point(239, 100), yyRadioButton.getPreferredSize())); //======== scrollPane1 ========
{
scrollPane1.setViewportView(selfTextArea);
}
contentPane.add(scrollPane1);
scrollPane1.setBounds(117, 165, 202, 71); //---- label4 ----
label4.setText("\u6d4b\u8bd5\u8868\u5355");
label4.setFont(label4.getFont().deriveFont(22f));
contentPane.add(label4);
label4.setBounds(124, 0, 100, 45); //---- label5 ----
label5.setText("\u7231\u597d\uff1a");
contentPane.add(label5);
label5.setBounds(34, 130, 65, 30); //---- singCheckBox ----
singCheckBox.setText("\u5531");
contentPane.add(singCheckBox);
singCheckBox.setBounds(new Rectangle(new Point(129, 135), singCheckBox.getPreferredSize())); //---- skipCheckBox ----
skipCheckBox.setText("\u8df3");
contentPane.add(skipCheckBox);
skipCheckBox.setBounds(new Rectangle(new Point(184, 135), skipCheckBox.getPreferredSize())); //---- rapCheckBox ----
rapCheckBox.setText("rap");
contentPane.add(rapCheckBox);
rapCheckBox.setBounds(239, 135, 50, rapCheckBox.getPreferredSize().height); {
// compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < contentPane.getComponentCount(); i++) {
Rectangle bounds = contentPane.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = contentPane.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
contentPane.setMinimumSize(preferredSize);
contentPane.setPreferredSize(preferredSize);
}
setSize(400, 365);
setLocationRelativeTo(null); //---- buttonGroup2 ----
ButtonGroup buttonGroup2 = new ButtonGroup();
buttonGroup2.add(xxRadioButton);
buttonGroup2.add(xyRadioButton);
buttonGroup2.add(yyRadioButton);
// JFormDesigner - End of component initialization //GEN-END:initComponents
} // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JLabel label1;
private JTextField userNameTestField;
private JLabel label2;
private JLabel label3;
private JButton submit;
private JButton reset;
private JRadioButton xxRadioButton;
private JRadioButton xyRadioButton;
private JRadioButton yyRadioButton;
private JScrollPane scrollPane1;
private JTextArea selfTextArea;
private JLabel label4;
private JLabel label5;
private JCheckBox singCheckBox;
private JCheckBox skipCheckBox;
private JCheckBox rapCheckBox;
// JFormDesigner - End of variables declaration //GEN-END:variables
}
效果演示
后记
掌握了基本操作后,下面分享我在大学时期做的课程实训作品:图书管理系统
图书管理系统
数据库用mysql,GUI图形化页面实现用户登录后对图书进行CRUD操作
登录页面
图书管理
图书类别管理
关于我们
Java GUI 桌面应用开发的更多相关文章
- Java GUI图形界面开发工具
Applet 应用程序 一种可以在 Web 浏览器中执行的小程序,扩展了浏览器中的网页功能. 缺: 1.需要下载 Applet 及其相关文件 2.Applet 的功能是受限制的 优: 3.无需 ...
- c++和java在桌面应用软件开发的区别
之前一直用c/c++比较多.最近做的事情用java写了个小程序.发现java的工具包很多而且好找,c++的桌面应用工具包就不好找了. java在项目的buildpath里添加外部jar包即可,c++需 ...
- JAVA GUI 工具
Java GUI图形界面开发工具 上大学那会儿比较主流的Java图形开发插件是:Visual Editor 和 SWT Designer, 不久又出了个Jigloo, 但去官网看了下发现这个东西也 ...
- J1001.Java原生桌面及Web开发浅谈
自从Java问世以来,在服务端开发方面取得了巨大的发展.但是在桌面/Web开发方面,一直没有得到大的发展.从最初的AWT,到Swing,再到JavaFX,Java从来没有在桌面/Web解决方案中取得重 ...
- Java -GUI开发九九乘法表
Java GUI开发九九乘法表 (1)实现目标: 利用java自带的awt包,基础控件开发一个九九乘法表,点击可以显示对应的乘法口诀. (2)控件选择: 点击——Button 显示——TextFiel ...
- 使用 Eclipse 可视化插件 windowbuilder 进行Java GUI开发(插件安装的两种方法)
对于Java GUI开发 其实最方便的方法是用插件制作,当然先了解完代码原理是最好的. eclispe安装windowbuilder有两种方式,一种是离线安装,一种是在线安装. 一.第一种在线安装: ...
- IntelliJ IDE 开发Java GUI 入门
j主要对java 的GUI相关知识进行简单的介绍和总结,整个博客按照创建一个java GUI的顺序进行介绍,期间穿插讲解用到的java Swing的布局.控件等相关知识.本博客所进行的讲解及工程的创建 ...
- 写在学习Java GUI之前
Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...
- Web桌面应用框架3:Web桌面应用开发的N种Style
研究Web桌面应用开发有一段时间了,总结了Web桌面应用开发的一些主流方式. 一.前端Style 这种方式的就是直接实现一个Web程序,再封装一个浏览器展示,相当粗暴和有效.著名的框架就是Electr ...
随机推荐
- 生产调优3 HDFS-多目录配置
目录 HDFS-多目录配置 NameNode多目录配置 1.修改hdfs-site.xml 2.格式化NameNode DataNode多目录配置(重要) 1.修改hdfs-site.xml 2.测试 ...
- map和forEach的区别
总结 forEach()可以做到的东西,map()也同样可以.反过来也是如此. map()会分配内存空间存储新数组并返回,forEach()不会返回数据. forEach()允许callback更改原 ...
- Swift3.0 延时执行
//延时1s执行 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(1*NSEC_PER_SEC))/ ...
- vue页面常用方法
输入框事件监听(三):blur与change的差异 iview 验证 trigger: 'blur,change', 同时加两个,省的每次还想input 还是 select 4.加载:Loading ...
- SpringMVC(1):SpringMVC入门
一,MVC 概述 MVC:模型,视图,控制器,是一种软件设计规范,本质是将业务逻辑,数据,显示,分离的方式来编写代码:前后端分离 Model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来. ...
- 【Java 调优】Java性能优化
Java性能优化的50个细节(珍藏版) 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: ...
- java代码从出生到执行的过程浅析
阅读<深入理解java虚拟机 第二版 JVM高级特性与最佳实践> - jdk版本为1.6 1.什么是编译型语言.解释型语言 解释型语言:源代码不是直接翻译成机器语言,而是先翻译成中间代码, ...
- JUC概述
JUC概述1: 首先是进程和线程的概念: 进程:是指系统在系统中正在运行的一个应用程序,程序一旦运行就是进程,进程是资源分配的最小单位 线程:进程之内独立执行,是程序执行的最小单位 线程的六大状态:在 ...
- redis实例cpu占用率过高问题优化
目录 一.简介 一.简介 前情提要: 最近接了大数据项目的postgresql运维,刚接过来他们的报表系统就出现高峰期访问不了的问题,报表涉及实时数据和离线数据,离线读pg,实时读redis.然后自然 ...
- 层次分析法、模糊综合评测法实例分析(涵盖各个过程讲解、原创实例示范、MATLAB源码公布)
目录 一.先定个小目标 二.层次分析法部分 2.1 思路总括 2.2 构造两两比较矩阵 2.3 权重计算方法 2.3.1 算术平均法求权重 2.3.2 几何平均法求权重 2.3.3 特征值法求权重 2 ...