前言
虽然现在已经很少项目会涉及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基本组件(按钮、标签等)
![](https://img.haomeiwen.com/i27422740/8d95255bd7f3394f.png!web)
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文件
![](https://img.haomeiwen.com/i27422740/da3252bd913562ac.png!web)
代码编写
创建图形页面,插件会自动同步生成java文件
![](https://img.haomeiwen.com/i27422740/f8bd5ead50b98a22.png!web)
![](https://img.haomeiwen.com/i27422740/6336bf5c354b4945.png!web)
![](https://img.haomeiwen.com/i27422740/fb68a044da059fbc.png!web)
进行拖拉布局
![](https://img.haomeiwen.com/i27422740/2850519dba6e5e0f.png!web)
关键点:
1、顶层容器(JFrame)的Name值要为:this
2、生成的java文件要继承 javax.swing.JFrame
publicclassTestFrameextendsjavax.swing.JFrame{//省略其他代码... }
3、需要进行单选的RadioButton,要添加同一个Button Group
![](https://img.haomeiwen.com/i27422740/ab7e810b8025479c.png!web)
4、defaultCloseOperation要设置成EXIT,点击X号退出页面时才会退出程序
![](https://img.haomeiwen.com/i27422740/a7ad54809a52ed49.png!web)
5、绑定事件,给按钮添加一个actionPerformed即可
![](https://img.haomeiwen.com/i27422740/03bd82e0778d7062.png!web)
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;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/**
* 测试
*/publicclassTestFrameextendsjavax.swing.JFrame{public TestFrame() { initComponents(); setVisible(true);// 显示
setLocationRelativeTo(null);//JFrame 窗口居中显示 } public staticvoidmain(String[] args) { java.awt.EventQueue.invokeLater(() -> {newTestFrame(); System.out.println("启动成功!"); }); }privatevoidSubmitActionPerformed(ActionEvent e){ //TODOaddyourcodehereSystem.out.println("---------------------------");System.out.println("姓名:"+userNameTestField.getText());Stringsex= "";if(xyRadioButton.isSelected()){sex= "男"; }elseif(xxRadioButton.isSelected()){sex= "女"; }elseif(yyRadioButton.isSelected()){sex= "不确定"; }System.out.println("性别:"+sex);Stringhobby= "";if(singCheckBox.isSelected()){hobby+= "唱、"; }if(skipCheckBox.isSelected()){hobby+= "跳、"; }if(rapCheckBox.isSelected()){hobby+= "rap、"; }System.out.println("爱好:"+hobby);System.out.println("自我评价:"+selfTextArea.getText()); }privatevoidinitComponents(){ //JFormDesigner-Componentinitialization-DONOTMODIFY//GEN-BEGIN:initComponentslabel1=newJLabel();userNameTestField=newJTextField();label2=newJLabel();label3=newJLabel();submit=newJButton();reset=newJButton();xxRadioButton=newJRadioButton();xyRadioButton=newJRadioButton();yyRadioButton=newJRadioButton();scrollPane1=newJScrollPane();selfTextArea=newJTextArea();label4=newJLabel();label5=newJLabel();singCheckBox=newJCheckBox();skipCheckBox=newJCheckBox();rapCheckBox=newJCheckBox(); //========this========setBackground(Color.gray);setTitle("Test GUI");setForeground(SystemColor.windowText);setMinimumSize(newDimension(300,200));setResizable(false);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);ContainercontentPane=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(newRectangle(newPoint(64,271), submit.getPreferredSize())); //----reset----reset.setText("\u91cd\u7f6e");contentPane.add(reset);reset.setBounds(newRectangle(newPoint(219,271), reset.getPreferredSize())); //----xxRadioButton----xxRadioButton.setText("\u5973");contentPane.add(xxRadioButton);xxRadioButton.setBounds(newRectangle(newPoint(184,100), xxRadioButton.getPreferredSize())); //----xyRadioButton----xyRadioButton.setText("\u7537");contentPane.add(xyRadioButton);xyRadioButton.setBounds(newRectangle(newPoint(129,100), xyRadioButton.getPreferredSize())); //----yyRadioButton----yyRadioButton.setText("\u4e0d\u786e\u5b9a");contentPane.add(yyRadioButton);yyRadioButton.setBounds(newRectangle(newPoint(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(newRectangle(newPoint(129,135), singCheckBox.getPreferredSize())); //----skipCheckBox----skipCheckBox.setText("\u8df3");contentPane.add(skipCheckBox);skipCheckBox.setBounds(newRectangle(newPoint(184,135), skipCheckBox.getPreferredSize())); //----rapCheckBox----rapCheckBox.setText("rap");contentPane.add(rapCheckBox);rapCheckBox.setBounds(239,135,50, rapCheckBox.getPreferredSize().height); { //computepreferredsizeDimensionpreferredSize=newDimension();for(int i =0; i < contentPane.getComponentCount(); i++){Rectanglebounds=contentPane.getComponent(i).getBounds();preferredSize.width=Math.max(bounds.x + bounds.width, preferredSize.width);preferredSize.height=Math.max(bounds.y + bounds.height, preferredSize.height); }Insetsinsets=contentPane.getInsets();preferredSize.width+=insets.right;preferredSize.height+=insets.bottom;contentPane.setMinimumSize(preferredSize);contentPane.setPreferredSize(preferredSize); }setSize(400,365);setLocationRelativeTo(null); //----buttonGroup2----ButtonGroupbuttonGroup2=newButtonGroup();buttonGroup2.add(xxRadioButton);buttonGroup2.add(xyRadioButton);buttonGroup2.add(yyRadioButton); //JFormDesigner-Endofcomponentinitialization//GEN-END:initComponents} //JFormDesigner-Variablesdeclaration-DONOTMODIFY//GEN-BEGIN:variablesprivateJLabellabel1;privateJTextFielduserNameTestField;privateJLabellabel2;privateJLabellabel3;privateJButtonsubmit;privateJButtonreset;privateJRadioButtonxxRadioButton;privateJRadioButtonxyRadioButton;privateJRadioButtonyyRadioButton;privateJScrollPanescrollPane1;privateJTextAreaselfTextArea;privateJLabellabel4;privateJLabellabel5;privateJCheckBoxsingCheckBox;privateJCheckBoxskipCheckBox;privateJCheckBoxrapCheckBox; //JFormDesigner-Endofvariablesdeclaration//GEN-END:variables}
效果演示
![](https://img.haomeiwen.com/i27422740/780cac392725d7d9.png!web)
后记
掌握了基本操作后,下面分享我在大学时期做的课程实训作品:图书管理系统
图书管理系统
数据库用mysql,GUI图形化页面实现用户登录后对图书进行CRUD操作
登录页面
![](https://img.haomeiwen.com/i27422740/360ee58bd0038af3.png!web)
图书管理
![](https://img.haomeiwen.com/i27422740/a0598c829d26d203.png!web)
![](https://img.haomeiwen.com/i27422740/f3c02303b71501e1.png!web)
图书类别管理
![](https://img.haomeiwen.com/i27422740/5c2c1f5a09cb8208.png!web)
![](https://img.haomeiwen.com/i27422740/7fbcc36d5374c0a5.png!web)
关于我们
![](https://img.haomeiwen.com/i27422740/e3d9c78eb5aec0da.png!web)
网友评论