GUI开发

Question One

Java 实现动作监听,网格布局添加四个按钮,实现四个不同的文本显示

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;class myGUI extends JFrame implements ActionListener{private Button b1, b2, b3, b4;private TextField t;myGUI(){this.setSize(300, 500);this.setLocation(500, 300);this.setVisible(true);this.setBackground(Color.GRAY);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLayout(new GridLayout(5, 1));b1 = new Button("Click Me, I am dog");b1.setBackground(Color.MAGENTA);b2 = new Button("Click Me, I am cat");b2.setBackground(Color.gray);b3 = new Button("Click Me, I am pig");b3.setBackground(Color.white);b4 = new Button("Click Me, I am chicken");b4.setBackground(Color.BLUE);t = new TextField();t.setBackground(Color.GRAY);this.add(b1);this.add(b2);this.add(b3);this.add(b4);this.add(t);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);}@Overridepublic void actionPerformed(ActionEvent e){if(e.getSource() == b1){t.setText("Do not touch me");}else if(e.getSource() == b2){t.setText("I am cat");}else if(e.getSource() == b3){t.setText("Do not eat me");}else{t.setText("chicken");}}
}public class Main {public static void main(String[] args) {new myGUI();}
}

Question Two

实现计算器

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;class Calculator {public static void main(String[] args) {new ShowCalculate();}
}class ShowCalculate extends JFrame implements ActionListener{private JPanel jp;private TextField jf1;private TextField jf2;private TextField jf3;private JButton btnAdd;private JButton btnMins;private JButton btnCheng;private JButton btnChu;ShowCalculate(){this.setSize(300,400);this.setTitle("计算器");this.setLocation(100, 100);jp=new JPanel();this.setContentPane(jp); // 设置 jp 为窗口的主面板jf1=new TextField();jf2=new TextField();jf3=new TextField();btnAdd =new JButton("+");btnAdd.addActionListener(this);btnMins=new JButton("-");btnMins.addActionListener(this);btnCheng=new JButton("*");btnCheng.addActionListener(this);btnChu=new JButton("/");btnChu.addActionListener(this);jp.setLayout(new GridLayout(4,1));jp.add(jf1);jp.add(jf2);JPanel jp1=new JPanel();jp1.setLayout(new GridLayout(1,4));jp1.add(btnAdd);jp1.add(btnMins);jp1.add(btnCheng);jp1.add(btnChu);jp.add(jp1);jp.add(jf3);this.setVisible(true);this.setDefaultCloseOperation(EXIT_ON_CLOSE);}@Overridepublic void actionPerformed(ActionEvent e) {int a1=0;int a2=0;a1=Integer.parseInt((String)jf1.getText());a2=Integer.parseInt((String)jf2.getText());if(e.getSource()==btnAdd){int a=a1+a2;jf3.setText(""+a);jf1.setText("");jf2.setText("");}else if(e.getSource()==btnMins){jf3.setText(""+(a1-a2));jf1.setText("");jf2.setText("");}else if(e.getSource()==btnCheng){jf3.setText(""+(a1*a2));jf1.setText("");jf2.setText("");}else if(e.getSource()==btnChu){jf3.setText(""+(a1/a2));jf1.setText("");jf2.setText("");}}
}

Question Three

实现布局管理

import java.awt.*;
import java.awt.Color;
/*
在使用 AWT(Abstract Window Toolkit)创建图形界面时,通常的做法是 :
先创建所有的组件并将它们添加到容器中,然后再设置容器(比如框架)的大小和可见性,
这样可以确保所有组件按照预期的布局显示出来。*/public class Main {public static void main(String[] args) {// 创建一个框架 fFrame f = new Frame("Frame with Panel");// 创建一个面板pPanel p = new Panel();// 把面板p添加到框架f中f.add(p);// 设置面板p的背景颜色为蓝色p.setBackground(Color.BLUE);// 设置面板p的布局为流式布局p.setLayout(new FlowLayout());// 在面板p中添加一个标签lLabel l = new Label("Label in Panel");p.add(l);// 在面板p中添加六个按钮for (int i = 1; i <= 6; i++) {Button b = new Button("Button " + i);p.add(b);}// 创建一个文本框cTextField c = new TextField("TextField in Panel", 20);// 把文本框c添加到面板p中p.add(c);// 设置框架f的大小和可见性f.setSize(400, 300);f.setVisible(true);}
}

但是更推荐 JFrame 和 JPanel,理由如下 :

使用 JFrame 替代 Frame,通常可以避免一些 AWT 的布局和可见性设置上的问题。JFrame 是 Swing 提供的一个更现代化的窗口组件,它具有更好的布局管理和组件显示控制机制,能够更方便地创建和管理复杂的用户界面。

使用 JFrame 的优势包括:

  1. 更好的布局管理器支持: Swing 提供了多种布局管理器(如 FlowLayout, BorderLayout, GridLayout 等),可以更灵活地管理组件布局。
  2. 更直观的可见性设置: JFrame 提供了 setVisible(true) 方法来显示窗口,并且通常会在所有组件添加完毕后设置可见性,避免布局显示不正确的问题。
  3. 更丰富的组件支持: Swing 提供了丰富的组件库,比如 JPanel, JButton, JLabel 等,它们更易于使用和管理。

Question Four

实现菜单功能

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;class MenuExample {public MenuExample() {// 创建 JFrameJFrame frame = new JFrame("Menu Example");// 设置关闭操作和大小frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);// 创建菜单条JMenuBar menuBar = new JMenuBar();// 创建文件菜单及其菜单项JMenu fileMenu = new JMenu("File");// 创建菜单项并添加事件处理JMenuItem openMenuItem = new JMenuItem();openMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 打开文件对话框的操作,这里做简单输出System.out.println("Open menu item clicked");}});fileMenu.add(openMenuItem);JMenuItem saveMenuItem = new JMenuItem("Save");saveMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 保存文件的操作,这里做简单输出System.out.println("Save menu item clicked");}});fileMenu.add(saveMenuItem);JMenuItem exitMenuItem = new JMenuItem("Exit");exitMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 退出程序的操作System.exit(0);}});fileMenu.add(exitMenuItem);// 创建编辑菜单及其菜单项JMenu editMenu = new JMenu("Edit");JMenuItem cutMenuItem = new JMenuItem("Cut");cutMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 执行剪切操作,这里做简单输出System.out.println("Cut menu item clicked");}});editMenu.add(cutMenuItem);JMenuItem copyMenuItem = new JMenuItem("Copy");copyMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 执行复制操作,这里做简单输出System.out.println("Copy menu item clicked");}});editMenu.add(copyMenuItem);JMenuItem pasteMenuItem = new JMenuItem("Paste");pasteMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 执行粘贴操作,这里做简单输出System.out.println("Paste menu item clicked");}});editMenu.add(pasteMenuItem);// 把菜单添加到菜单条menuBar.add(fileMenu);menuBar.add(editMenu);// 把菜单条添加到 JFrameframe.setJMenuBar(menuBar);// 设置 JFrame 可见frame.setVisible(true);}
}public class Main{public static void main(String[] args) {new MenuExample();}
}

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

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

相关文章

0627,0628,0629,排序,文件

01&#xff1a;请实现选择排序&#xff0c;并分析它的时间复杂度&#xff0c;空间复杂度和稳定性 void selection_sort(int arr[], int n); 解答&#xff1a; 稳定性&#xff1a;稳定&#xff0c; 不稳定的&#xff0c;会发生长距离的交换 4 9 9 4 1 &#xf…

ubuntu,linux下屏蔽坏块方法-240625-240702封存

在windows下的屏蔽坏道的方法 机械硬盘坏道的文件系统级别的屏蔽方法_硬盘如何屏蔽坏扇区-CSDN博客 https://blog.csdn.net/cyuyan112233/article/details/139408503?spm1001.2014.3001.5502 【免费】磁盘坏道屏蔽工具磁盘坏道屏蔽工具_机械硬盘屏蔽坏扇区资源-CSDN文库 https…

第一周题目总结

1.车尔尼有一个数组 nums &#xff0c;它只包含 正 整数&#xff0c;所有正整数的数位长度都 相同 。 两个整数的 数位不同 指的是两个整数 相同 位置上不同数字的数目。 请车尔尼返回 nums 中 所有 整数对里&#xff0c;数位不同之和。 示例 1&#xff1a; 输入&#xff1a…

【嵌入式DIY实例-ESP8266篇】-LCD ST7735显示网络时间

LCD ST7735显示网络时间 文章目录 LCD ST7735显示网络时间1、硬件准备2、代码实现本文将介绍如何使用 ESP8266 NodeMCU Wi-Fi 板实现互联网时钟,其中时间和日期显示在 ST7735 TFT 显示屏上。 ST7735 TFT是一款分辨率为128160像素的彩色显示屏,采用SPI协议与主控设备通信。 1…

Python中的变量和数据类型:Python中有哪些基本数据类型以及变量是如何声明的

在Python中&#xff0c;变量是用来存储数据的容器&#xff0c;而数据类型则定义了这些数据的种类。Python是一种动态类型语言&#xff0c;这意味着你不需要在声明变量时指定其类型&#xff1b;Python解释器会在运行时自动确定变量的类型。 Python中的基本数据类型 Python中有…

SQL语句(DML)

DML英文全称是Data Manipulation Language&#xff08;数据操作语言&#xff09;&#xff0c;用来对数据库中表的数据记录进行增删改等操作 DML-添加数据 insert into employee(id, workno, name, gender, age, idcard) values (1,1,Itcast,男,10,123456789012345678);select *…

AI 与数据的智能融合丨大模型时代下的存储系统

WOT 全球技术创新大会2024北京站于 6 月 22 日圆满落幕。本届大会以“智启新纪&#xff0c;慧创万物”为主题&#xff0c;邀请到 60 位不同行业的专家&#xff0c;聚焦 AIGC、领导力、研发效能、架构演进、大数据等热门技术话题进行分享。 近年来&#xff0c;数据和人工智能已…

记录搭建一台可域名访问的HTTPS服务器

一、背景 近期公司业务涉及到微信小程序&#xff0c;即将开发完成需要按照微信小程序平台的要求提供带证书的域名请求服务器。 资源背景介绍如下&#xff1a; 1、域名 公司已有一个二级域名&#xff0c;再次申请新的二级域名并且实现ICP备案不仅需要花重金重新购买&#xff0c;…

Docker实现Redis主从,以及哨兵机制

Docker实现Redis主从,以及哨兵机制 目录 Docker实现Redis主从,以及哨兵机制准备Redis镜像创建Redis主节点配置文件启动Redis从节点确认主从连接哨兵主要功能配置哨兵文件创建Redis哨兵的Docker容器 要通过Docker实现Redis的主从&#xff08;master-slave&#xff09;复制&#…

汽车EDI: BMW EDI项目案例

宝马集团是全世界成功的汽车和摩托车制造商之一&#xff0c;旗下拥有BMW、MINI和Rolls-Royce三大品牌&#xff1b;同时提供汽车金融和高档出行服务。作为一家全球性公司&#xff0c;宝马集团在14个国家拥有31家生产和组装厂&#xff0c;销售网络遍及140多个国家和地区。 本文主…

什么是 Socks5 代理?了解和使用 SOCKS5 代理的终极指南

SOCKS5是什么以及它如何工作&#xff1f; 在网络和互联网协议领域&#xff0c;有多种工具和技术在确保安全高效的通信方面发挥着至关重要的作用。 SOCKS5 就是这样一个工具&#xff0c;它代表套接字安全版本 5。 在这篇博文中&#xff0c;我们将深入探讨 SOCKS5 的细节&…

CoAtNet(NeurIPS 2023, Google)论文解读

paper&#xff1a;CoAtNet: Marrying Convolution and Attention for All Data Sizes third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/maxxvit.py 背景 自AlexNet以来&#xff0c;ConvNets一直是计算机…

【基于R语言群体遗传学】-5-扩展到两个以上等位基因及多基因位点

我们现在继续对于群体遗传学进行统计建模&#xff0c;书接上回&#xff0c;我们讨论了孤雌生殖的物种违反哈代温伯格遗传比例的例子&#xff0c;那我们现在来看多于两个等位基因的情况的计算。 如果没有看过之前文章的同学&#xff0c;可以先去看一下之前的文章&#xff1a; …

开源租房项目

项目名称项目地址描述体验地址后端代码前端代码小程序端代码gitHubstart租房或房屋交易项目https://github.com/saysky/manland?tabreadme-ov-filePC端 管理端http://manland.liuyanzhao.com/有有无房适–房屋租赁管理平台https://github.com/LiuXIn011/rightHouse开源房屋管理…

非对称加密算法原理与应用1——秘钥的生成

作者:私语茶馆 1.前言 非对称算法有非常多的用途,实现license管控,数字签名,加密内容等等,由于涉及场景和标准非常多,因此实际使用过程中还是存在一定门槛,这里记录一下利用非对称算法RSA的应用关键点,并提供实现license管理的案例。预计拆分为以下几个章节: (1)秘…

Apipost接口测试工具的原理及应用详解(三)

本系列文章简介: 随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为软件开发过程中不可或缺的一环。在众多API测试工具中,Apipost凭…

【分布式数据仓库Hive】HivQL的使用

目录 一、Hive的基本操作 1. 使用Hive创建数据库test 2. 检索数据库&#xff08;模糊查看&#xff09;&#xff0c;检索形如’te*’的数据库 3. 查看数据库test详情 4. 删除数据库test 5. 创建一个学生数据库Stus&#xff0c;在其中创建一个内部表Student&#xff0c;表格…

ubuntu20.04在anaconda环境下不能使用catkin_make

ubuntu20.04在anaconda环境下不能直接使用catkin_make编译&#xff0c;报错显示需要安装python3-empy 这时候查询会发现该软件包已经安装了&#xff0c;但是是在ROS环境中&#xff0c;安装anaconda环境后python解释器的指向变了&#xff0c;所以需要在anaconda环境中再装pytho…

Unity udp通信详解

在Unity中实现UDP通信&#xff0c;需要使用C#的System.Net和System.Net.Sockets命名空间。UDP&#xff08;用户数据报协议&#xff09;是一种无连接的网络协议&#xff0c;它允许数据包在网络上发送和接收&#xff0c;但不保证数据包的到达顺序、完整性或可靠性。这使得UDP非常…

沃德校园助手丨校园跑腿-校园外卖-校园论坛三合一系统

校园跑腿项目其实由来已久&#xff0c;由于大学校园生活的特殊性&#xff0c;除了日常的课程学习之外&#xff0c;大学生的所有生活基本长期处于全模式形态下的校园封闭环境中&#xff0c;再加之当前大学生一部分学业繁忙&#xff0c;办事不便。另一部分自理能力较差&#xff0…