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.rhkb.cn/news/367800.html

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

相关文章

Vue报错:Component name “xxx” should always be multi-word vue/multi-word-component

问题&#xff1a;搭建脚手架时报错&#xff0c;具体错误如下&#xff1a; ERROR in [eslint] E:\personalProject\VueProjects\vueproject2\src\components\Student.vue10:14 error Component name "Student" should always be multi-word vue/multi-word-compon…

【分布式数据仓库Hive】常见问题及解决办法

目录 一、启动hive时发现log4j版本和hadoop的版本有冲突 解决办法&#xff1a;删除hive下高版本的slf4j 二、启动hive报错 Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/Object;)V …

Elasticsearch (1):ES基本概念和原理简单介绍

Elasticsearch&#xff08;简称 ES&#xff09;是一款基于 Apache Lucene 的分布式搜索和分析引擎。随着业务的发展&#xff0c;系统中的数据量不断增长&#xff0c;传统的关系型数据库在处理大量模糊查询时效率低下。因此&#xff0c;ES 作为一种高效、灵活和可扩展的全文检索…

分别使用netty和apache.plc4x测试读取modbus协议的设备信号

记录一下常见的工业协议数据读取方法 目录 前言Modbus协议说明Netty 读取测试使用plc4x 读取测试结束语 前言 Modbus 是一种通讯协议&#xff0c;用于在工业控制系统中进行数据通信和控制。Modbus 协议主要分为两种常用的变体&#xff1a;Modbus RTU 和 Modbus TCP/IP Modbus …

嵌入式Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader&#xff0c;uboot 是一个遵循 GPL 协议的开源软件&#xff0c;uboot是一个裸机代码&#xff0c;可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说&#xff0c;可以在没有系统的情况…

苹果手机收不到短信怎么恢复?90%的人都在这么做

在使用苹果手机的过程中&#xff0c;有时候会遇到无法接收短信的问题。这不仅影响正常的沟通&#xff0c;还可能错过重要的通知和验证码。那么&#xff0c;手机收不到短信怎么恢复呢&#xff1f;别担心&#xff0c;90%的人都在使用这些简单而有效的方法来解决这一问题。 本文将…

Halcon支持向量机

一 支持向量机 1 支持向量机介绍&#xff1a; 支持向量机(Support Vector Machine&#xff0c;SVM)是Corinna Cortes和Vapnik于1995年首先提出的&#xff0c;它在解决小样本、非线性及高维模式识别表现出许多特有的优势。 2 支持向量机原理: 在n维空间中找到一个分类超平面…

14 卡尔曼滤波及代码实现

文章目录 14 卡尔曼滤波及代码实现14.0 基本概念14.1 公式推导14.2 代码实现 14 卡尔曼滤波及代码实现 14.0 基本概念 卡尔曼滤波是一种利用线性系统状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对系统状态进行最优估计的算法。由于观测数据包括系统中的噪声和…

React Native V0.74 — 稳定版已发布

嗨,React Native开发者们, React Native 世界中令人兴奋的消息是,V0.74刚刚在几天前发布,有超过 1600 次提交。亮点如下: Yoga 3.0New Architecture: Bridgeless by DefaultNew Architecture: Batched onLayout UpdatesYarn 3 for New Projects让我们深入了解每一个新亮点…

移动智能终端数据安全管理方案

随着信息技术的飞速发展&#xff0c;移动设备已成为企业日常运营不可或缺的工具。特别是随着智能手机和平板电脑等移动设备的普及&#xff0c;这些设备存储了大量的个人和敏感数据&#xff0c;如银行信息、电子邮件等。员工通过智能手机和平板电脑访问企业资源&#xff0c;提高…

【vue3】【vant】 移动端中国传统文化和民间传说案例

更多项目点击&#x1f446;&#x1f446;&#x1f446;完整项目成品专栏 【vue3】【vant】 移动端中国传统文化和民间传说案例 获取源码方式项目说明&#xff1a;其中功能包括项目包含&#xff1a;项目运行环境运行截图和视频 获取源码方式 加Q群&#xff1a;632562109项目说…

Linux_管道通信

目录 一、匿名管道 1、介绍进程间通信 2、理解管道 3、管道通信 4、用户角度看匿名管道 5、内核角度看匿名管道 6、代码实现匿名管道 6.1 创建子进程 6.2 实现通信 7、匿名管道阻塞情况 8、匿名管道的读写原子性 二、命名管道 1、命名管道 1.1 命名管道通信 …

源代码层面分析Appium-inspector工作原理

Appium-inspector功能 Appium Inspector 基于 Appium 框架&#xff0c;Appium 是一个开源工具&#xff0c;用于自动化移动应用&#xff08;iOS 和 Android&#xff09;和桌面应用&#xff08;Windows 和 Mac&#xff09;。Appium 采用了客户端-服务器架构&#xff0c;允许用户通…

C++初学者指南-3.自定义类型(第一部分)-异常

C初学者指南-3.自定义类型(第一部分)-异常 文章目录 C初学者指南-3.自定义类型(第一部分)-异常简介什么是异常&#xff1f;第一个示例用途:报告违反规则的行为异常的替代方案标准库异常处理 问题和保证资源泄露使用 RAII 避免内存泄漏&#xff01;析构函数&#xff1a;不要让异…

Taogogo Taocms v3.0.2 远程代码执行漏洞(CVE-2022-25578)

前言 CVE-2022-25578 是一个存在于 Taogogo Taocms v3.0.2 中的代码注入漏洞。此漏洞允许攻击者通过任意编辑 .htaccess 文件来执行代码注入。 漏洞详情 漏洞描述&#xff1a;攻击者可以利用此漏洞上传一个 .htaccess 文件到网站&#xff0c;并在文件中注入恶意代码&#xf…

CesiumJS【Basic】- #058 绘制网格填充多边形(Entity方式)-使用shader

文章目录 绘制网格填充多边形(Entity方式)-使用shader1 目标2 代码2.1 main.ts绘制网格填充多边形(Entity方式)-使用shader 1 目标 使用Entity方式绘制绘制网格填充多边形 - 使用shader 2 代码 2.1 main.ts import * as Cesium from cesium;// 创建 Cesium Viewer 实例…

主流国产服务器操作系统技术分析

主流国产服务器操作系统 信创 "信创"&#xff0c;即信息技术应用创新&#xff0c;作为科技自立自强的核心词汇&#xff0c;在我国信息化建设的进程中扮演着至关重要的角色。自2016年起步&#xff0c;2020年开始蓬勃兴起&#xff0c;信创的浪潮正席卷整个信息与通信技…

程序员AI提效案例:统计B站课程耗时情况

文章目录 一&#xff0c;时长统计需求二&#xff0c;一波三折三&#xff0c;终极方案 AIJava总结 今天为了写一篇博客&#xff0c;这篇博客介绍了B站的一个Java项目&#xff0c;这个项目分为三个阶段&#xff1a; 初级篇高级篇运维篇 一&#xff0c;时长统计需求 我想根据每个…

Spring+SpringMVC+MyBatis整合

目录 1.SSM介绍1.1 什么是SSM&#xff1f;1.2 SSM框架1.2.1 Spring1.2.2 SpringMVC1.2.3 MyBatis 2.SSM框架整合2.1 建库建表2.2 创建工程2.3 pom.xml2.4 log4j.properties2.5 db.properties2.6 applicationContext-dao.xml2.7.applicationContext-tx.xml2.8 applicationContex…

昇思25天学习打卡营第9天|静态图模式的深度剖析与应用指南

目录 背景介绍 动态图模式 静态图模式 静态图模式的使用场景 静态图模式开启方式 基于装饰器的开启方式 基于context的开启方式 静态图的语法约束 JitConfig配置选项 静态图高级编程技巧 背景介绍 AI 编译框架主要包含两种运行模式&#xff0c;即动态图模式与静态图模…