黑马程序员_GUI

------- android培训java培训、期待与您交流! ----------

GUI:

用图形的方式,来显示计算机操作的界面,这样更方便直观

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

它们之间的继承关系图:

分为组件和容器


当我们进行窗体设计的时候,必须使用布局管理器对窗体进行整体的设计。

比较常见的组件排放方式:

1.   FlowLayout(流式布局管理器)

从左到右的排序排列

2.   BorderLayout(网格布局管理器)

东西南北中

3.   GridLayout(网格布局管理器)

规则的矩阵

下边学习一个特殊的容器:Frame(例子)


重要的部分:事件监听机制

1.   事件源(就是awt,swing包中的那些图形界面组件)

2.   事件(Event)(每个事件源都有自己的特有的对应事件和共性事件)

3.   监听器(Listener)(将可以触发某一个事件的动作都已经封装到了监听器中)

4.   事件处理(引发事件后处理方式,在监听器中处理)

 

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    public static void main(String[] args)
    {
	//创建了一个最初不可见的窗口实例
	Frame f = new Frame("my awt");
	
	//设置窗体的大小。
	f.setSize(200,400);
	
	//设置窗体的初始位置(与左上角的坐标位置)
	f.setLocation(200, 400);
	
	//设置其布局方式为流式布局
	f.setLayout(new FlowLayout());
	
	//增加一个按钮控件
	Button b = new Button("按钮");
	//将按钮增加到窗体上
	f.add(b);
	//这里设置为true,设置这个窗体为可见的。
	f.setVisible(true);
	
    }
}

事件监听机制的流程图(十分重要)


监听器中对动作的处理可能不止一个。多个动作可能由一个监听器去处理。

事件练习1(窗体事件)

对窗体进行关闭:

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    public static void main(String[] args)
    {
	//创建了一个最初不可见的窗口实例
	Frame f = new Frame("my awt");
	//设置窗体的大小。
	f.setSize(200,400);
	//设置窗体的初始位置(与左上角的坐标位置)
	f.setLocation(200, 400);
	//设置其布局方式为流式布局
	f.setLayout(new FlowLayout());
	//增加一个按钮控件
	Button b = new Button("按钮");
	
	//将按钮增加到窗体上
	f.add(b);
	//增加事件监听器
	f.addWindowListener(new WindowAdapter(){
	   @Override
	public void windowClosing(WindowEvent e)
	{
	   System.exit(0);
	} 	    
	});
	//这里设置为true,设置这个窗体为可见的。
	f.setVisible(true);
	
    }
}



事件练习2(添加一个按钮,点击按钮退出程序)

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    //定义该图形中所需的组件的引用
    private Frame f;
    private Button but;
    public FrameDemo()
    {
	init();
    }
    public void init()
    {
	f = new Frame("my frame");
	//对frame进行基本设置
	f.setBounds(200,100,200,100);
	f.setLayout(new FlowLayout());
	
	but = new Button("my button");
	
	//将组件添加到frame中
	f.add(but);
	
	//加载一下窗体上的事件
	myEvent();
	
	//显示窗体
	f.setVisible(true);
	
    }
    //专门用于处理事件的函数
    private void myEvent()
    {
	f.addWindowListener(new WindowAdapter(){
	    @Override
	    public void windowClosing(WindowEvent e)
	    {
	       System.exit(0);
	    }
	});
	//给这个窗体添加一个退出按钮,具备退出程序的功能
	//按钮就是事件源。
	//想要知道哪个组件具备什么样的特有监听器。需要查看该组件对象
	//支持哪些监听。只有它自己知道。
	but.addActionListener(new ActionListener()
	{
	    public void actionPerformed(ActionEvent e)
	    {
		System.exit(0);
		
	    }
	});
    }
    public static void main(String[] args)
    {
	new FrameDemo();
    }
}



共性事件:(鼠标键盘事件,几乎所有的组件都具备)

addMouseListener

addKeyListener

监听鼠标按下的事件

 

  private void myEvent()
    {
	but.addMouseListener(new MouseAdapter()
	{
	    public void mouseClicked(MouseEvent e)
	    {
		System.out.println("鼠标点击");
	    }
	});
    }


//监听键盘按下的事件

private void myEvent()
    {
	but.addKeyListener(new KeyAdapter()
	{
	   @Override
	    public void keyPressed(KeyEvent e)
	    {
	       System.out.println(e.getKeyChar());
	    } 
	    
	});
}


对话框Dialog的实现

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    //定义该图形中所需的组件的引用
    private Frame f;
    private Button but;
    public FrameDemo()
    {
	init();
    }
    public void init()
    {
	f = new Frame("my frame");
	//对frame进行基本设置
	f.setBounds(200,100,200,100);
	f.setLayout(new FlowLayout());
	
	but = new Button("my button");
	
	//将组件添加到frame中
	f.add(but);
	
	//加载一下窗体上的事件
	myEvent();
	//显示窗体
	f.setVisible(true);
    }
    //专门用于处理事件的函数
    private void myEvent()
    {
	but.addKeyListener(new KeyAdapter()
	{
	   @Override
	    public void keyPressed(KeyEvent e)
	    {
	       if(e.getKeyChar()=='a')
	       {
		   Dialog d = new Dialog(f,"提示框",true);
		   //这里的true与false表示如果提示框出现,则能否对其他
		   //组件进行操作。
		   d.setBounds(200,200,200,300);
		   d.setLayout(new FlowLayout());
		   Label l = new Label();
		   l.setText("警告");
		   d.add(l);
		   Button b = new Button("确定");
		   b.addActionListener(new ActionListener()
		  {
		    public void actionPerformed(ActionEvent e)
		    {
			System.exit(0);
			//当点击确定按钮时候,退出程序。
		    }
		  });
		   d.add(b);   
		   d.setVisible(true);
	       }
	    }
	});
    }
    public static void main(String[] args)
    {
	new FrameDemo();
    }
}


菜单的效果(例)

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{	
    private Frame f;
    private MenuBar mb;
    private Menu m;
    private Menu subMenu;
    private MenuItem closeItem;
    private MenuItem subItem;
    public FrameDemo()
    {
	init();
    }
    public  void init()
    {
	f = new Frame("my window");
	f.setBounds(200,100,400,500);
	f.setLayout(new FlowLayout());
		mb = new MenuBar();
	m = new Menu("file");
	subMenu = new Menu("子菜单");
	subItem = new MenuItem("子条目");
	closeItem = new MenuItem("退出");
	m.add(closeItem);
	subMenu.add(subItem);
	m.add(subMenu);
	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);
	    }
	});
    }
    public static void main(String[] args)
    {
	new FrameDemo();
    }
}


jar包双击执行的操作:

修改jar包下MANIFEST.MF文件,配置其主函数

例如

Manifest-Version:1.0

Main-Class:frame.FrameDemo

C++本科毕业设计-ROS机械臂上位机源码(下载即用),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源码(下载即用)C++本科毕业设计-ROS机械臂上位机源
平差在测绘工程中具有极其重要的地位,其主要作用是处理测量数据中的误差,从而提升测量结果的精度。在“平差课程设计报告”中,学生田忠星以水准网为例,开展了间接平差的实践研究。间接平差的基本原理是通过构建观测方程,将观测值(如高程差)表示为待求参数(即未知点的高程)的函数,进而求解这些参数,以实现对测量误差的消除或减小。 在水准网间接平差程序设计方面,核心思路如下:首先,确定独立参数的数量,即未知点的高程数量;其次,将每个观测值(高程差)用选定的参数表示;接着,依据误差方程的系数矩阵和自由项构建法方程,法方程的数量与参数数量一致;然后,解法方程以求得参数(高程)的平差值;最后,利用误差方程计算观测值(高差)的平差值,并评估其精度。 程序运行流程主要包括以下步骤:首先,用户输入水准网的已知点数、未知点数以及观测值信息,如点号、高程和高差观测值等;接着,初步估算未知点的高程,基于已知点的高程和观测值进行近似计算;然后,根据观测值构建误差方程,包括系数矩阵、权矩阵和常数项;通过通用平差过程,解决由系数矩阵、权矩阵和常数项组成的线性系统,得到参数的平差值;最后,显示中间计算结果和最终平差结果,并支持数据保存功能。 程序界面采用菜单驱动方式,设有“文件”和“计算”两个主要菜单,支持数据的打开、保存和退出操作,同时具备近似高程计算、误差方程列立和平差计算等功能。界面中还包含文本框控件,用于显示输入、计算和输出信息,以及通用对话框用于文件操作。 在程序源代码中,定义了公共变量(如strFileName用于存储文件名)和其他变量,用于存储观测值、系数矩阵、权矩阵等信息。程序通过循环、条件判断等逻辑结构实现数据处理和计算。 这份“平差课程设计报告”全面记录了水准网间接平差的全过程,从理论阐述到实践操作,再到程序设计,完整展示了测量平差的基本原理和应用技术,对学习和理解测量误差处理具有重要的参考价值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值