虽然现在已经很少项目会涉及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文件
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
JavaFX
2022-01-27更新
JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计、创建、测试、调试和部署富客户端程序,并且和Java一样跨平台。JavaFX比Swing更简单、更强大!
中文文档:http://www.javafxchina.net/blog/docs/
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MyApp extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
public static void main(String[] args) {
launch(args);