Java GUI编程

article/2025/11/1 6:09:00

GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好。

 Swing概述
 Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为。
 Swing中的大部分组件类位于javax.swing包中。
 Swing中的组件非常丰富,支持很多功能强大的组件。

容器组件

Java的图形用户界面的基本组成部分是组件,组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象;

组件不能独立地显示出来,必须将组件放在一定的容器(container)中才可以显示出来。

容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容器中添加组件。

窗口(Frame)和面板(Panel)是最常用的两个容器。

JFrame类

JFrame用于在Swing程序中创建窗体

JFrame类的常用方法:
JFrame():创建新窗体,该窗体初始为不可见。
JFrame(String title):创建新窗体,使用参数title指定标题,该窗体初始为不可见。
void setSize(int width, int height):调整窗口大小。
void setVisible(boolean b):使窗口可视
void setTitle(String title):改变窗口的标题
void setResizable(boolean resizable):禁止设置窗口大小
void setLocation(int x,int y):窗口出现的坐标位置
void setLocationRelativeTo(null):相对位置 水平垂直居中
void setDefaultCloseOperation(int operation):关闭窗口选项

void setBackground(Color bg)设置面板的背景色,由参数bg指定颜色
void setLayout(LayoutManager mgr)设置面板的布局,参数是布局管理器
Component add(Component comp)往面板中添加一个组件


    框架(JFrame) 内部包含一个名叫Container(内容面板)的面板容器,如果要给框架中添加图形控件,通常将它们加入到这个内容面板中。
    通过JFrame类中的getContentPane()方法即可获得此框架的内容面板。

Jpanel类

 JPanel提供面板,它是轻量级的容器;
 面板中可以添加其它组件,也可以设置布局,我们一般使用面板来实现布局嵌套。

也可以自己创建Jpanel面板对象,把JPanel作为一个组件添加到某个容器中。

public class Demo1 extends JFrame{public Demo1() throws HeadlessException {this.setTitle("窗口标题");this.setSize(500, 500);//大小//this.setLocation(300, 500);//位置坐标this.setLocationRelativeTo(null);//相对位置 水平垂直居中this.setResizable(false);//禁止设置窗口大小this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项//在窗口上添加面板JPanel  jp = new JPanel();jp.setBackground(new Color(252,196,34));//改变窗口背景颜色JButton jb = new JButton("登录");jp.add(jb);//this--窗口this.add(jp);this.setVisible(true);//显示窗口,最后让窗口显示}public static void main(String[] args) {new Demo1();}
}

布局管理器

swing中,提供了布局管理器类的对象可以管理
    每个Jpanel都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Jpanel的setLayout方法改变其布局管理器对象或通过构造方法设置。

     Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也就是说容器只是把组件放进来,但它不管怎样放置。至于如何放置需要用到布局管理器(Container) 。Java中有几种常用的布局管理器,分别是:FlowLayout , BorderLayout, GridLayout。

FlowLayout:流式布局,它将组件按照从左到右、从上到下的顺序来安排,并在默认情况下使组件尽量居中放置。

FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
不改变组件的大小,按组件原有尺寸显示组件,可设置不 同的组件间距,行距以及对齐方式。

构造方法:

new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40
个像素。
new FlowLayout(FlowLayout.LEFT);左对齐。
new FlowLayout();使用缺省的居中对齐方式。

public class Demo2 extends JFrame{public Demo2() throws HeadlessException {this.setTitle("窗口标题");this.setSize(500, 500);//大小//this.setLocation(300, 500);//位置坐标this.setLocationRelativeTo(null);//相对位置 水平垂直居中this.setResizable(false);//禁止设置窗口大小this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项/*JPanel默认是流式布局, 组件居中对齐*/JPanel  jp = new JPanel(new FlowLayout(FlowLayout.LEFT));//JPanel  jp = new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));JButton jb1 = new JButton("登录1");JButton jb2 = new JButton("登录2");JButton jb3 = new JButton("登录3");jp.add(jb1);jp.add(jb2);jp.add(jb3);//this--窗口this.add(jp);this.setVisible(true);//显示窗口,最后让窗口显示}public static void main(String[] args) {new Demo2();}
}

 BorderLayout:边界布局
BorderLayout布局管理器只允许在容器内放置5个组件,这5个组件的位置是由BorderLayout类中的
North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中。

BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中
(CENTER)五个区域,组件只能被添加到指定的区域。
 如不指定组件的加入部位,则默认加入到CENTER区。
 每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。

public class Demo1 extends JFrame{public Demo1() throws HeadlessException {this.setTitle("窗口标题");this.setSize(500, 500);//大小//this.setLocation(300, 500);//位置坐标this.setLocationRelativeTo(null);//相对位置 水平垂直居中this.setResizable(false);//禁止设置窗口大小this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项//在窗口上添加面板JPanel  jp = new JPanel(new BorderLayout());//JPanel  jp = new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));JButton jb1 = new JButton("登录1");JButton jb2 = new JButton("登录2");JButton jb3 = new JButton("登录3");jp.add(jb1,BorderLayout.NORTH);//指定组件在边界布局中的位置jp.add(jb2,BorderLayout.WEST);jp.add(jb3);this.add(jp);this.setVisible(true);//显示窗口,最后让窗口显示}public static void main(String[] args) {new Demo1();}
}

 GridLayout:网格布局

GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的大小和创建网格的多少来确定的。

 当组件数目大于网格数时,GridLayout保持行数不变而自动增加列数。
 GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。
 组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。
 在 GridLayout 构造方法中指定分割的行数和列数.

public class Demo1 extends JFrame{public Demo1() throws HeadlessException {this.setTitle("窗口标题");this.setSize(500, 500);//大小//this.setLocation(300, 500);//位置坐标this.setLocationRelativeTo(null);//相对位置 水平垂直居中this.setResizable(false);//禁止设置窗口大小this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项//在窗口上添加面板JPanel  jp = new JPanel(new GridLayout(2, 2));//JPanel  jp = new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));JButton jb1 = new JButton("登录1");JButton jb2 = new JButton("登录2");JButton jb3 = new JButton("登录3");JButton jb4= new JButton("登录4");jp.add(jb1);jp.add(jb2);jp.add(jb3);jp.add(jb4);this.add(jp);this.setVisible(true);//显示窗口,最后让窗口显示}public static void main(String[] args) {new Demo1();}
}

常用组件

标签(JLabel):标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。
构造函数:JLabel():创建一个空的标签
JLabel(String text) :创建一个带文本的标签
JLabel(Icon image):创建一个带图像的标签
方法:void setText(String text):设置标签上的文本
String getText():获得标签上的文本
setFont(new Font(“宋体”,Font.BOLD, 18)):设置字体

单行文本(JTextField):

JTextField的构造函数:JTextField()
JTextField(String text )
JTextField(int columns)
JTextField(String text, int columns)
方法:void setText(String text):设置文本框中的文本
String getText():获得文本框中的文本
void setEditable(boolean b) :设置文本框是否可以编辑
setColumns(20): 设置列数

public class Demo1 extends JFrame{public Demo1() throws HeadlessException {this.setTitle("窗口标题");this.setSize(500, 500);//大小//this.setLocation(300, 500);//位置坐标this.setLocationRelativeTo(null);//相对位置 水平垂直居中this.setResizable(false);//禁止设置窗口大小this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项JPanel  jp = new JPanel();JLabel label = new JLabel("账号");label.setForeground(Color.blue);label.setFont(new Font("楷体", Font.BOLD,20));JTextField accountText = new JTextField(15);//accountText.getText();JButton jb = new JButton("登录");jp.add(label);jp.add(accountText);jp.add(jb);this.add(jp);this.setVisible(true);//显示窗口,最后让窗口显示}public static void main(String[] args) {new Demo1();}
}

多行文本框(JTextArea)
构造函数:JTextArea():创建一个空的文本域
JTextArea(String text):用指定文本初始化文本域
JTextArea(int rows, int columns):创建一个指定行数和列数的空文本域
JTextArea(String text,int rows, int columns):创建一个带文本,并指行数和列数的
方法:void setText(String text): 设置文本域中的文本
String getText() :获得文本域中的文本
void setFont(Font font) :设置文本域中文本的字体
void setLineWrap(boolean wrap):是否自动换行,默认false
如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中:
JScrollPane scrollPane = new JScrollPane(txtArea);
add(scrollPane );

JTextArea jta=new JTextArea("多行文本框",5,5);System.out.println(jta.getText());//得到文本框内容jta.setLineWrap(true);//使文本框实现自动换行jp.add(jta);JScrollPane jScrollPane=new JScrollPane(jta);//给文本框添加滚轮机制jp.add(jScrollPane);

 密码框(JPasswordField)
构造函数:JPasswordField():创建一个空密码框
JPasswordField(String text):创建一个自定义文本的密码框
JPasswordField(String text, int columns):指定列数的密码框
方法:char[] getPassword():将密码转为char数组

JPasswordField jpf=new JPasswordField("11111",10);//密码框的文本,与列数jp.add(jpf);

 

按钮(JButton)
构造方法:JButton(String text)创建一个带文本的标签
JButton(Icon image):创建一个带图像的标签
方法:void setBackground(Color bg) 设置按钮的背景色
void setEnabled(boolean b):设置启用(或禁用)按钮,由参数b决定
void setToolTipText(String text):设置按钮的悬停提示信息

jb = new JButton("登录");jb.setBackground(Color.PINK);//改变按钮背景颜色jb.setToolTipText("悬停提示信息");//将鼠标悬停在按钮上会出现信息jb.setEnabled(true);设置启用(或禁用)按钮jp.add(jb);

 菜单栏组件
构造方法:JMenuBar();
方法:add(menu); 向菜单栏添加菜单
菜单组件:
构造方法:JMenu(“菜单名称");
方法:add(menuItem); 向菜单添加菜单选项
菜单项组件:
构造方法:JMenuItem(“菜单项名称");
将菜单栏添加到窗口:setJMenuBar(menuBar);

JMenuBar jm=new JMenuBar();JMenu jMenu=new JMenu("菜单菜单");//创建菜单栏JMenu jmenu2=new JMenu("工具");//创建菜单JMenuItem jmi=new JMenuItem("菜单项名称");//创建菜单项JMenuItem jmi2=new JMenuItem("帮助");jm.add(jMenu);jm.add(jmenu2);jMenu.add(jmi);jmenu2.add(jmi2);this.setJMenuBar(jm);//将菜单栏添加到窗口

 

按键监听

我们在使用窗口是按动不同的按键会有不同的效果,这就要给按键加上监听器,去感测鼠标或者键盘有没有工作,从而行动。

ActionListener类即是监听器类型,此外还有、addMouseListener、addKeyListener接口去监听。

jb.addActionListener(this);    
@Overridepublic void actionPerformed(ActionEvent e) {Object obj=e.getSource();if (obj==jb){System.out.println("登录成功");}}

 

 当我们每次点击鼠标时,便会成功出发监听器,从而完成方法。

以下是鼠标监听addMouseListener。

jb = new JButton("登录");jp.add(jb);jb.addMouseListener(new MouseListener() {@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("点击鼠标");}@Overridepublic void mousePressed(MouseEvent e) {System.out.println("按压鼠标");}@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("松开鼠标");}@Overridepublic void mouseEntered(MouseEvent e) {System.out.println("鼠标进入");}@Overridepublic void mouseExited(MouseEvent e) {System.out.println("鼠标退出");}});

 这里我们添加鼠标监听器的构造方法中使用的是内部类中的匿名类,这个其实将相当于将实现监听功能的类给简单化了。 实现了这个接口就得完成所有的抽象方法,有的时候我们不需要使用那么多方法,这时候我们就可以使用适配器MouseAdapter。

 这时候就可以选择实现,自己想要实现的方法了。

addKeyListener键盘监听

键盘监听会监听到每次对于键盘的操作,从而落实到代码中。

 JTextField accountText = new JTextField(15);jp.add(accountText);accountText.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {System.out.println("键盘敲击");}@Overridepublic void keyPressed(KeyEvent e) {System.out.println("按压键盘");}@Overridepublic void keyReleased(KeyEvent e) {System.out.println("松开键盘");}});

 JOptionPane对话框
showMessageDialog():消息对话框
主要有五种消息类型,类型不同,图标不同:
ERROR_MESSAGE: 错误消息提示
INFORMATION_MESSAGE: 信息提示
WARNING_MESSAGE: 警告提示
QUESTION_MESSAGE :问题提示
PLAIN_MESSAGE :简洁提示
showConfirmDialog():确认对话框
主要有四种消息类型,类型不同,图标不同:
DEFAULT_OPTION :默认选项
YES_NO_OPTION :是/否选项
YES_NO_CANCEL_OPTION: 是/否/取消选项
OK_CANCEL_OPTION :确定/取消

jb1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String s=jt1.getText();//得到文本框的内容String s2=jt2.getText();if (!s.matches("\\w*\\d*")){//使用正则表达式判断文本框中只能输入字母和数字JOptionPane.showConfirmDialog(null,"账号密码只能由字母数字组成","登录提示",JOptionPane.ERROR_MESSAGE);//消息对话框,形参分别是附属成分,内容,标题,提示内容}if(s.equals("admin")&&s2.equals("111")){JOptionPane.showConfirmDialog(null,"登录成功","登录提示",JOptionPane.INFORMATION_MESSAGE);//确认对话框dispose();//关闭窗口new Chat().ChatRoom();//创造一个新的窗口}}});

 

 

 

 

 


http://chatgpt.dhexx.cn/article/4ubf9dMx.shtml

相关文章

Java GUI入门教程

人生的烦恼,多在于知道的太多,而做的太少。 Java程序中开发GUI页面。下面我主要对Java中实现图像管理、图形绘制和颜色管理等做出介绍,与此同时,Swing包也做出一部分介绍。 像素与坐标 用于表示图像像素数目的称为图像分辨率。显…

【JAVA】GUI编程

GUI的概念 Swing概述 容器组件 布局管理器 常用组件 事件处理 对话框 GUI的概念 GUI(Graphical User Interface)即图形用户界面,它能够使应用程序使用起来更加便捷,看上去更加友好。 Swing概述 Swing是纯Java组件,使得…

Java--GUI编程

目录 GUI的概念 Swing概述 ​编辑 容器组件 布局管理器 常用组件 对话框 内部类 GUI的概念 GUI(Graphics User Interface),图形用户界面,是指采用图形方式显示的计算机操作用户界面,是计算机与其使用者之间的…

GUI编程(java)

1 GUI的概念 GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好,更加方便用户操作。 2 Swing概述 Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为&#x…

Java GUI 开发

Swing图形用户界面 GUI 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面,包括窗口、菜单、按钮等各种屏幕组件。 Swing Swing是JAVA的一个GUI工具包&a…

GUI (java)

GUI 一.GUI概念二.Swing概述三.容器组件四.常用容器1.窗体(1) JFrame类的构造方法(2) JFrame类的常用方法 2.面板(1)JPanel类的构造方法(2)JPanel类的常用方法 五.布局管理器1. FlowLayout 流式布局(1)FlowLayout构造方法 2.BorderLayout 边界布局3.GridLayout 网格布局 六.常用…

javaGUI

GUI 1.GUI的概念: GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好; 2.Swing概述: Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行…

GUI(java)

GUI基本介绍: 1.GUI是什么? GUI的全称为Graphical User Interface,图形化界面或图形用户接口,是指采用图形方式显示 的计算机操作环境用户接口。与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简 便易用。…

Java中的GUI

记录Java中的GUI知识,Java中的GUI相关编程思想是需要我们去理解和掌握的。最好可以使用基础的swing组件去构建出界面。完整记录使用swing组件进行登录页面开发,提供完整代码 文章目录 前言一、swing组件二、swing组件的使用1.窗口2.面板 三、swing组件的…

Java之GUI简单介绍

GUI介绍(一)常见的组件及简单监听器 第一个窗口程序容器控件JLabel控件简单事件处理文本框JTextFiled复选框JCheckBox下拉列表JComboBox布局管理器LayoutManager边界布局管理器BorderLayout手工布局 前段时间学了GUI,总体上概念还是有点模糊&…

JAVA GUI(图形用户界面)

1.GUI概述 目前,我们编写的程序都是基于控制台的程序GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好 2.Swing概念 位于javax.swingSwing是纯java组件,使得应用在不同平台中有相同的外观和行为 3.什么是组件,…

Java——GUI(图形用户界面)

学习目标: 1、掌握布局管理器、AWT事件处理机制以及常用事件 2、熟悉Swing组件的使用 3、了解GUI开发的相关原理和技巧 GUI全称是GraphicalUser Interface,即图形用户界面。顾名思义,就是应用程序提供给用户操作的图形界面,包括…

Java GUI——Java图形用户界面

Java GUI——Java图形用户界面 1、Java GUI概述 1.1、GUI的前世今生 早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(CLI)”。如:Windows中的DOS窗口。后来,Apple公司率先在电脑的操作系统中实现了图…

APIGateway 简介

1. APIGateway是什么 APIGateway 即API网关,所有请求首先会经过这个网关,然后到达后端服务,有点类似于Facade模式。API网关作为系统接口对外的统一出口,可以减少调用方对服务实现的感知。 没有API网关时的结系统构如下图&#xff…

aws api gateway 创建一个REST API作为Amazon S3代理

你可能想把样本API导入为Amazon S3的代理,如样本API作为Amazon S3代理的OpenAPI定义所示。关于如何使用OpenAPI定义导入API的说明,请参阅使用OpenAPI配置REST API。 创建API资源来代表Amazon S3资源 我们将使用API的根(/)资源作…

【AWS系列】第七讲: AWS Serverless之API Gateway

目录 序言 一、基本介绍 1.1 RESTful API 1.2 HTTP API 1.3 WebSocket API 2、使用介绍 2.1 新建 2.2 选类型 2.3 点击构建 2.4 输入参数 2.5 点击创建 2.6 新建方法 2.6 方法测试 三、总结 序言 初步研究一下API Gateway,加油 一、基本介绍 Amazon AP…

一文搞懂 Service Mesh 和 API Gateway 关系和区别

公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 关于Service Mesh和API Gateway之间的关系,这个问题过去两年间经常被问起,社区也有不少文章和资料给出解答。其中不乏 Christian Posta 这样的网红给出过深度…

aws api gateway 构建一个私有的REST API

你将创建一个私有的REST API。客户只能从你的亚马逊VPC内访问该API。该API与公共互联网隔离,这是一个常见的安全要求。 首先,你使用AWS CloudFormation模板来创建一个亚马逊VPC、一个VPC端点、一个AWS Lambda函数,并启动一个亚马逊EC2实例&am…

AWS Lambda 搭配 Amazon API Gateway (REST API)

AWS Lambda 搭配 Amazon API Gateway (REST API) AWS Lambda 是一种无伺服器、事件推动的运算服务,而 Amazon API Gateway 可以让开发人员轻松地建立、发布、维护、监控和保护任何规模的 API,使用 API Gateway 可以建立 RESTful API 和 WebSocket API&a…

AWS API Gateway与AWS Lambda代理集成构建REST API

项目地址 https://github.com/JessicaWin/aws lambda分支为自动创建API Gateway REST API资源的部署方式apigateway分支为自定义API Gateway REST API资源的部署方式 创建Lambda Handler 创建父模块 使用idea创建一个maven工程: File->New->Project 在左侧菜单栏中…