java--GUI

news2024/11/24 12:38:36

目录

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 {
    @Override
    public void actionPerformed(ActionEvent e) {
    }
}

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

为组件添加事件处理程序

addActionListener

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

为文本框添加事件监听

键盘处理事件

addKeyListener

按键按下keyPressed

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

为组件添加事件处理程序

鼠标处理事件  共五种

addMouseListener

jButton.addMouseListener(new MouseAdapter(){
    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("鼠标点击");
    }
    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("鼠标按下");
    }
    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("鼠标释放(鼠标按键抬起)");
    }
    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("鼠标移入到标签上");
    }
    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("鼠标从标签移出");
    }
});

为窗口添加事件监听

addWindowListener

关闭的监听

this.addWindowListener(new WindowAdapter() {
    @Override
    public 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(){
    @Override
    public 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.coloradmin.cn/o/1649282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高实时、高可靠的微内核操作系统——鸿道Intewell

近年来,我国不断推进工业转型升级,力求实现从传统工业大国向现代工业强国的跨越。想要在新一轮科技革命中“超车”,需要从多个维度进行深度布局和全面发力。 ——科技创新是核心驱动力 积极推动工业结构的优化和升级,通过发展新…

全新拼团模式 你一定没见过 白拿产品还有收益!

在七星拼团模式中,奖励制度是其核心吸引力之一。今天,我们将深入探讨这一模式的三种奖励:直推奖、滑落奖和出局奖,以及它们背后的互助机制。 奖励规则概述 首先,让我们了解一下奖励的具体规则。假设商品售价为499元&a…

【MM32F3270 Micropython】pwm输出

文章目录 前言一、PWM脉宽调制技术介绍二、machine.PWM 类2.1 machine.PWM 类的构造对象2.2 PWM 对象初始化2.3 关闭PWM设备2.4 设置pwm的周期2.5 设置占空比 三、pwm示例代码总结 前言 MicroPython是一种精简的Python 3编程语言实现,旨在在微控制器和嵌入式系统上…

突破AI迷雾:英特尔携手星环科技打造向量数据库革新方案,直降大模型幻觉

去年爆火的大模型,正在从百模大战走向千行百业落地应用。不过行业数据规模有限,企业数据隐私安全的要求等等因素,都让行业大模型的准确率面临挑战。近期发布的《CSDN AI 开发者生态报告》数据显示,“缺乏数据/数据质量问题”在大模…

RS2103XH 功能和参数介绍及规格书

RS2103XH 是一款单刀双掷(SPDT)模拟开关芯片,主要用于各种模拟信号的切换和控制。下面是一些其主要的功能和参数介绍: 主要功能特点: 模拟信号切换:能够连接和断开模拟信号路径,提供灵活的信号路…

set_input_delay的理解

1,set_input_delay约束理解 input_delay是指输入的数据到达FPGA的pad引脚时相对于时钟边沿的延迟有多大,单位是ns,数值可以是正,也可以是负。通过set_input_delay约束告诉编译器输入时钟和输入数据的相位关系。如下图所示假设时钟…

uniapp的app端软件更新弹框

1:使用html PLUS实现:地址HTML5 API Reference (html5plus.org),效果图 2:在app.vue的onLaunch生命周期中,代码如下: onLaunch: function() {let a 0let view new plus.nativeObj.View(maskView, {backg…

PyRun_SimpleString(“import cv2“); 报错解决

#include <Python.h> #include <iostream>using namespace std;int main() {Py_Initialize();if (!Py_IsInitialized()){printf("初始化失败&#xff01;");return 0;}PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.ap…

【大模型】LLaMA-1 模型介绍

文章目录 一、背景介绍二、模型介绍2.1 模型结构2.2 模型超参数2.3 SwiGLU 三、代码分析3.1 模型结构代码3.2 FairScale库介绍 四、LLaMA家族模型4.1 Alpaca4.2 Vicuna4.3 Koala(考拉)4.4 Baize (白泽)4.5 Luotuo (骆驼&#xff0c;Chinese)4.6 其他 参考资料 LLaMA&#xff08…

本地运行AI大模型简单示例

一、引言 大模型LLM英文全称是Large Language Model&#xff0c;是指包含超大规模参数&#xff08;通常在十亿个以上&#xff09;的神经网络模型。2022年11月底&#xff0c;人工智能对话聊天机器人ChatGPT一经推出&#xff0c;人们利用ChatGPT这样的大模型帮助解决很多事情&am…

如何将 ONLYOFFICE 协作空间服务器版更新至 2.5

最近我们发布了 ONLYOFFICE 协作空间 2.5 云端版。好消息&#xff0c;该文档协作平台的自托管版本也已推出。现在&#xff0c;您可以轻松更新协作空间的实例&#xff0c;在本地尝试所有新功能。阅读本文了解更多信息。 ONLYOFFICE 协作空间 2.5 新功能 更新到 ONLYOFFICE 协作…

Type-C转音频(USB2.0数据传输)+PD充电芯片乐得瑞LDR6500/LDR6023

LDR6500 USB-C DRP 接口 USB PD 通信芯片概述 Type-C转音频(USB2.0数据传输)PD充电芯片乐得瑞LDR6500LDR6500是乐得瑞科技针对USB Type-C标准中的Bridge设备而开发的USB-C DRP&#xff08;Dual Role Port&#xff0c;双角色端口&#xff09;接口USB PD&#xff08;Power Deliv…

彻底解决python的pip install xxx报错(文末附所有依赖文件)

今天安装pip install django又报错了&#xff1a; C:\Users\Administrator>pip install django WARNING: Ignoring invalid distribution -ip (d:\soft\python\python38\lib\site-pac kages) Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting djan…

redis持久化存储

Redis的持久化机制 Redis是一个基于内存的数据库&#xff0c;它的数据是存放在内存中&#xff0c;内存有个问题就是关闭服务或者断电会丢失。Redis的数据也支持写到硬盘中&#xff0c;这个过程就叫做持久化。 Redis提供如下两种持久化方式 RDB&#xff08;Redis DataBase&am…

【计算机毕业设计】基于SSM++jsp的网络游戏公司官方平台系统【源码+lw+部署文档+讲解】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

我写了一套几乎无敌的参数校验组件!基于 SpEL 的参数校验组件「SpEL Validator」

前言 大家好&#xff0c;我是阿杆&#xff0c;不是阿轩。 参数校验这个东西&#xff0c;很多情况下都是比较简单的&#xff0c;用 NotNull、Size 等注解就可以解决绝大多数场景&#xff0c;但也有一些场景是这些基本注解解决不了的&#xff0c;只能用一些其他的方式处理&…

【极速前进】20240423-20240428:Phi-3、fDPO、TextSquare多模态合成数据、遵循准则而不是偏好标签、混合LoRA专家

一、Phi-3技术报告 论文地址&#xff1a;https://arxiv.org/pdf/2404.14219 ​ 发布了phi-3-mini&#xff0c;一个在3.3T token上训练的3.8B模型。在学术基准和内部测试中的效果都优于Mixtral 8*7B和GPT-3.5。此外&#xff0c;还发布了7B和14B模型phi-3-small和phi-3-medium。…

环形链表理解||QJ141.环形链表

在链表中&#xff0c;不光只有普通的单链表。之前写过的的一个约瑟夫环形链表是尾直接连向头的。这里的环形链表是从尾节点的next指针连向这链表的任意位置。 那么给定一个链表&#xff0c;判断这个链表是否带环。qj题141.环形链表就是一个这样的题目。 这里的思路是用快慢指…

面试笔记——多线程使用场景

线程池使用场景&#xff08;CountDownLatch&#xff0c; Future&#xff09; CountDownLatch CountDownLatch&#xff08;闭锁/倒计时锁&#xff09;用来进行线程同步协作&#xff0c;等待所有线程完成倒计时&#xff08;一个或者多个线程&#xff0c;等待其他多个线程完成某件…

经典面试题之滑动窗口专题

class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {// 长度最小的子数组 // 大于等于 targetint min_len INT32_MAX;// 总和int sum 0;int start 0; // 起点for(int i 0; i< nums.size(); i) {sum nums[i];while(sum > targe…