黑马程序员————java基础之GUI

Java GUI 编程入门
本文介绍了Java图形用户界面(GUI)编程的基础知识,包括AWT和Swing组件库的使用,布局管理器的选择,以及如何创建简单的窗体,并实现事件监听机制。此外,还展示了如何在应用程序中添加菜单。

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

GUI(图形用户界面)

概述:

GUI:Graphical User Interface(图形用户接口)。用图形的方式,来显示计算机操作的界面,这样更方便更直观。

CLI:Command line User Interface (命令行用户接口)就是常见的Dos命令行操作。需要记忆一些常用的命令,操作不直观。

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

AWT与Swing:

java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。

javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全 由Java实现。增强了移植性,属轻量级控件。

继承关系图:

Component:是一个容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。

布局管理器:

布局:就是容器中的组件的排放方式。

常见的布局管理器:

FlowLayout(流式布局管理器);从左到右的顺序排列。Panel默认的布局管理器。

BorderLayout(边界布局管理器);排序方式:东,南,西,北,中;若窗体只有一个组件,则会覆盖整个窗体。Frame默认的布局管理器。

GridLayout(网格布局管理器);规则的矩阵

CardLayout(卡片布局管理器)选项卡

GridBagLayout(网格包布局管理器)非规则的矩阵

建立一个简单的窗体:

Container常用子类:Window Panel(面板, 不能单独存在。)

Window常用子类:Frame Dialog

简单的窗体创建步骤:

Frame f = new Frame(“my window”);//创建窗体并设置窗体名字

f.setLayout(new FlowLayout());//设置窗体布局

f.setSize(500,400);//设置窗体大小

f.setLocation(300,200);//设置窗体出现在屏幕的位置

Button b = new Button("my button"); //定义组件并设置组件名字

f.add(b);通过add()方法将组件添加进窗体

f.setVisible(true);//设置窗体是否显示

如以下代码:

<span style="font-size:12px;">import java.awt.*;
class  AwtDemo
{
	public static void main(String[] args) 
	{
		Frame f = new Frame("my window");
		f.setSize(500,400);
		f.setLocation(300,200);
		f.setLayout(new FlowLayout());
		Button b = new Button("my button");		
		f.add(b);
		f.setVisible(true);		
	}
<strong>}</strong></span>

事件监听机制组成:

事件源(组件)

事件(Event)

监听器(Listener)

事件处理(引发事件后处理方式)

其中事件源,事件,监听器在java中都已经定义好了,可以直接获取其对象使用,我们能做就是引发事件后的处理方式。

事件监听机制流程图:


事件监听机制:

确定事件源(容器或组件)

通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

一般用匿名内部类来表示。

在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

事件触发后会把事件打包成对象传递给该变量。(其中包括 事件源对象。通过getSource()或者,getComponent()获取。)

如以下代码:

<span style="font-size:12px;">import java.awt.*;
import java.awt.event.*;


class  FrameDemo
{

	//定义该图形中所需的组件的引用。
	private Frame f;
	private Button but;

	FrameDemo()
	{
		init();
	}

	public void init()
	{
		f = new Frame("my frame");

		//对frame进行基本设置。
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());

		but = new Button("my button");

		//将组件添加到frame中
		f.add(but);


		//加载一下窗体上事件。
		myEvent();

		//显示窗体;
		f.setVisible(true);

	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});

		//让按钮具备退出程序的功能
	
		but.addActionListener(new ActionListener()
		{
			private int count = 1;
			public void actionPerformed(ActionEvent e)
			{
				
				Button b = (Button)e.getSource();
				
				Frame f1 = (Frame)b.getParent();

				f1.add(new Button("button-"+count++));
				f1.validate();


			}
		});
	}

	public static void main(String[] args) 
	{
		new FrameDemo();
	}
}
</span>


菜单继承体系:

菜单:

MenuBar(菜单栏),Menu(菜单),MenuItem(菜单条目)

先创建菜单条,再创建菜单,每一个菜单 中建立菜单项。

也可以菜单添加到菜单中,作为子菜单。

通过setMenuBar()方法,将菜单添加到Frame中。

如以下例子:

<span style="font-size:12px;">import java.awt.*;
import java.awt.event.*;


class MyMenuDemo 
{

	private Frame f;
	private MenuBar mb;
	private Menu m,subMenu;
	private MenuItem closeItem,subItem;

	MyMenuDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my window");
		f.setBounds(300,100,500,600);
		f.setLayout(new FlowLayout());

		mb = new MenuBar();

		m = new Menu("文件");

		subMenu = new Menu("子菜单");



		subItem = new MenuItem("子条目");
		closeItem = new MenuItem("退出");
		
		subMenu.add(subItem);

		m.add(subMenu);
		m.add(closeItem);
		mb.add(m);

		f.setMenuBar(mb);

		myEvent();

		f.setVisible(true);


	}
	private void myEvent()
	{

		closeItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);	
			}
		});
	}
	
	public static void main(String[] args) 
	{
		new MyMenuDemo();
	}
}
</span>


 

 

 

 

内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值