java--GUI

目录

GUI(Graphical User Interface)

swing

窗口(JFrame)

面板(JPanel)

流水布局(FlowLayout)

边界布局(BorderLayout)

​编辑

网格布局(GridLayout)

按钮(JButton)

标签组件,用来设置文字(JLabel)

单行文本框组件(JTextField)

多行文本框组件(文本域)

带滚动条的面板

密码框(JPasswordField)

菜单栏 菜单 菜单项

菜单栏(JMenuBar)

菜单(JMenu)

菜单项(JMenuItem)

监听器(ActionListener)

为文本框添加事件监听

键盘处理事件

为组件添加事件处理程序

鼠标处理事件  共五种

为窗口添加事件监听

对话框

消息框

选择对话框

输入对话框

内部类

匿名内部类


GUI(Graphical User Interface)

图形用户界面——Java提供的图形用户界面

UI——用户界面

图形界面是方便用户操作的

swing

javax.swing包

包含了Java主要的图形界面的实现类  

组件

        容器组件——窗口,面板,对话框

        功能组件——按钮  输入框,菜单……

容器的add()向容器中添加组件

窗口(JFrame)

需继承JFrame

创建窗口的常用方法

setTitle(String title):设置窗口的标题。

setSize(int width, int height):设置窗口的大小。

setLocation(int x, int y):设置窗口的位置。

setResizable(boolean resizable):设置窗口是否可调整大小。

setDefaultCloseOperation(int operation):设置窗口关闭时的操作。

add(Component comp):添加组件。

setVisible(boolean visible):设置窗口是否可见。

dispose():释放当前窗口

public class DemoFrame extends JFrame {public DemoFrame() throws HeadlessException {this.setTitle("小世界");//名称this.setSize(300,300);//设置宽和高//this.setLocation(200,400);//自定义坐标位置this.setLocationRelativeTo(null);//水平垂直居中this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序this.setResizable(false);//禁止窗口拖拽调整大小this.setVisible(true);//让窗口显示  放在设置的最后一行}public static void main(String[] args) {new DemoFrame();//创建一个窗口}
}

面板(JPanel)

面板组件可以设置布局管理方式:布局管理器

流水布局(FlowLayout)

面板默认的布局方式

把组件放在一排,从左到右排放,一行占满后,重新开启一行

面板默认流式布局是水平居中的

JPanel jPanel = new JPanel(new FlowLayout());自动居中

JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));左对齐

JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,10,30));设置组件之间水平,垂直间距

jPanel.setBackground(new Color(255, 153, 2, 255));设置背景颜色

JPanel jPanel = new JPanel(new FlowLayout());//自动居中 默认是水平居中,上下左右为5个像素间距
jPanel.setBackground(new Color(255, 153, 2, 255));//设置面板背景颜色
JButton jButton1 = new JButton("按钮1");//创建一个按钮组件
JButton jButton2 = new JButton("按钮2");
jPanel.add(jButton1);
jPanel.add(jButton2);
//把面板添加到窗口上
this.add(jPanel);

边界布局(BorderLayout)

共五个区域,每个区域可以放置一个组件,并且占满整个区域

中间区域是必须的,其他区域可以根据需要使用

添加组件时,可以指定组件的位置,如果不指定,默认添加到中间区域

JPanel jPanel = new JPanel(new BorderLayout());
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
JButton jButton5 = new JButton("按钮5");jPanel.add(jButton1,BorderLayout.NORTH);//上
jPanel.add(jButton2,BorderLayout.SOUTH);//下
jPanel.add(jButton3,BorderLayout.EAST);//右
jPanel.add(jButton4,BorderLayout.WEST);//左
jPanel.add(jButton5,BorderLayout.CENTER);//中this.add(jPanel);

网格布局(GridLayout)

网格类似于一个表格,可以设置行数和列数

每个网格中只能放一个组件,占满整个区域

从第一行开始摆放,第一行占满后,再开启第二行

构造时先行后列

JPanel jPanel = new JPanel(new GridLayout(2,2));
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(jButton4);this.add(jPanel);

按钮(JButton)

创建一个按钮组件

JButton jButton = new JButton("登录");

禁用按钮

jButton.setEnabled(false);

在按钮上进行提示

jButton.setToolTipText("点击登录");

标签组件,用来设置文字(JLabel)

JLabel jLabel = new JLabel("账号");

jLabel.setFont(new Font("楷体", Font.BOLD,20));//设置字体

jLabel.setForeground(new Color(20,10,10));//设置字体颜色

单行文本框组件(JTextField)

columns设置列数  列宽

JTextField jTextField = new JTextField(15);

获取文本框中输入的内容

jTextField.getText();

jPanel.add(jTextField);

多行文本框组件(文本域)

JTextArea jTextArea = new JTextArea(5,20);

设置强制换行,当文本域的一行满后自动换行

jTextArea.setLineWrap(true);

设置文本域不可编辑

jTextArea..setEditable(false);

带滚动条的面板

把多行文本框加进来,若不加入,在输入超过指定的行数后,会使文本域变大

JScrollPane jsp = new JScrollPane(jTextArea);

jPanel.add(jsp);

密码框(JPasswordField)

JLabel jLabel = new JLabel("密码");

JPasswordField jPasswordField = new JPasswordField(15);

char[] word = jPasswordField.getPassword();//获得输入的密码  char[]类型

添加密码框

jPanel.add(jPasswordField);

菜单栏 菜单 菜单项

菜单栏(JMenuBar)

JMenuBar jMenuBar = new JMenuBar();//创建菜单栏

菜单(JMenu)

创建的是早期的菜单,有立体效果

构造方法

JMenu jMenu = new JMenu("文件");

菜单项(JMenuItem)

构造方法

JMenuItem jMenuitem1 = new JMenuItem("打开");

把菜单项添加到菜单上

jMenu.add(jMenuitem);

把菜单添加到菜单栏上

jMenuBar.add(jMenu);

把菜单栏添加到窗口

this.setJMenuBar(jMenuBar);

监听器(ActionListener)

监听器 监听组件有没有事件产生

一旦点击了某个按钮产生事件,监听器就捕获到这次事件 从而去调用对应的事件处理程序

ActionListener是一个接口,使用监听有不同的用法

1.另一个类(需传入参数,使用麻烦)

2.内部类

使用内部类比另一个类更加合适,内部类中可以直接使用外部类的成员

class A implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {}
}

3.new 接口 创建一个匿名内部类,简化语法

为组件添加事件处理程序

addActionListener

jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println(jTextField.getText());}
});

为文本框添加事件监听

键盘处理事件

addKeyListener

按键按下keyPressed

jTextField.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {System.out.println("按键按下了"+e.getKeyChar()+":"+e.getKeyCode());jButton.setEnabled(true);}
});

为组件添加事件处理程序

鼠标处理事件  共五种

addMouseListener

jButton.addMouseListener(new MouseAdapter(){@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("鼠标从标签移出");}
});

为窗口添加事件监听

addWindowListener

关闭的监听

this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {int res = JOptionPane.showConfirmDialog(null, "是否退出","提示操作",JOptionPane.OK_CANCEL_OPTION);if(res==0){//点击确定//打开登录窗口new LogonFrame();dispose();//释放聊天窗口}}
});

对话框

消息框

JOptionPane.showMessageDialog()

无返回值

ERROR_MESSAGE  错误

WARNING_MESSAGE  警告

jButton.addMouseListener(new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("鼠标点击");String s = jTextField.getText();if(s.length()==0){JOptionPane.showMessageDialog(null, "请输入账号","操作提供",JOptionPane.WARNING_MESSAGE);}}
});

选择对话框

JOptionPane.showConfirmDialog()

有int类型的返回值

JOptionPane.showConfirmDialog(null, "你确定要登录吗?");

JOptionPane.showConfirmDialog(null, "你确定要登录吗?");
int res = JOptionPane.showConfirmDialog(null, "你确定要登录吗?","标题",JOptionPane.OK_CANCEL_OPTION);
//点击确定返回0,点击取消返回2
if(res ==0){//执行登录操作
}

JOptionPane.OK_CANCEL_OPTION,对话框只有确定和取消

输入对话框

JOptionPane.showInputDialog(null,"请输入姓名");

有String类型的返回值

内部类

在一个类的内部定义的类称为内部类,内部类也是外部类的成员

为什么要使用内部类

1.内部类可以直接访问外部类的成员,无论成员是不是private

2.内部类只服务于当前的外部类,其他地方用不到此类

匿名内部类

new 接口/抽象类

不是new接口/抽象类的对象,为接口或抽象类创建一个匿名内部类来实现继承他们,省去创建一个类简化语法

内部类的意义

内部类编译后的字节码

A$B.class

类C中需要用到类中的成员,类C是一个外部类,无法使用到类A中成员 就可以把类C定义到类A中去, 类C只服务于类A,其他类中用不到类C,此种情况下也可以将类C定义为类A的内部类

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于51单片机的自动售货机系统

一、项目概述 本文设计了一款以AT89C51单片机为核心的自动售货机系统,并且着重详细地介绍了自动售货机的整体系统设计方案、硬件选择基础、软件使用方法及技巧。 以AT89C51作为CPU处理单元连接各个功能模块;以44矩阵键盘作为输入控制模块对货物进行种类…

红海云OA存在任意文件上传漏洞【附poc】

漏洞复现 1、fofa poc见文末 body"RedseaPlatform" 打开burp进行抓包发送到repeater,如下图所示: 打入poc(文末获取),成功上传。 「你即将失去如下所有学习变强机会」 学习效率低,学不到实战内…

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构:方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

文章目录 前言NvDataInterfaceNvBlockNvM配置SWC配置RTE Mapping使用生成的接口操作NVM总结前言 NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断…

大模型改变了哪些工作方式?

大模型的崛起深刻改变了我们的工作方式。如今,许多行业已广泛应用大型机器学习模型,实现了自动化数据处理、智能决策和高效分析。这一变革不仅释放了大量人力资源,使得人们能够专注于更具创造性的任务,还大幅提升了工作效率和准确…

Windows系统和unbtun系统连接usb 3.0海康可见MVS和红外艾睿相机

一.海康可见USB3.0工业面阵相机 海康usb相机需要去海康官网上下载对应系统的MVS客户端及SDK开发包 海康机器人-机器视觉-下载中心 选择Windows系统和unbtun(我是linux aarch64,所以选择了对应压缩包解压) Windows系统 1.双击安装包进入安装界面&…

GEE数据集——DeltaDTM 全球沿海数字地形模型数据集

DeltaDTM 全球沿海数字地形模型产品 简介 DeltaDTM 是全球沿岸数字地形模型(DTM),水平空间分辨率为 1 弧秒(∼30 米),垂直平均绝对误差(MAE)为 0.45 米。它利用 ICESat-2 和 GEDI …

【算法】滑动窗口——最大连续1的个数

本篇文章讲的是“最大连续1的个数”这道题,从最开始的简单暴力到用滑动窗口算法实现解题的思路历程,有需要借鉴即可。 目录 1.题目2.暴力求解3.滑动窗口解法3.1优化一:end重返start优化,end指针不回退3.2优化二:某一st…

找不到模块“vue-router”。你的意思是要将 moduleResolution 选项设置为 node,还是要将别名添加到 paths 选项中?

在tsconfig.app.json中添加,记得一定是 tsconfig.app.json 中,如添加到 tsconfig.node.json 还是会报错的 哈哈哈哈,不瞒你们,我就添加错了,哈哈哈。所以这也算写一个demo提醒自己 "compilerOptions": {&qu…

excel如何将多列数据转换为一列?

这个数据整理借用数据透视表也可以做到: 1.先将数据源的表头补齐,“姓名” 2.点击插入选项卡,数据透视表,在弹出对话框中,数据透视位置选择 现有工作表,(实际使用时新建也没有问题)…

frp内网穿透服务搭建与使用

frp内网穿透服务搭建与使用 1、frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp工作原理 服务端运行,监听一个主端口…

C#修改默认参数settings文件

右击项目在设置中进行修改: 千万不要在这里改。 如果要在自己的项目里添加这个文件,首先新建个文件夹,然后添加.setting文件,然后再像上面说的那样添加属性。