AWT

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Checkbox;
import java.awt.CheckboxMenuItem;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.Panel;
import java.awt.PopupMenu;
import java.awt.ScrollPane;
import java.awt.Scrollbar;
import java.awt.Shape;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.IntStream;



/*
	2017-02-20 19:09:45
	AWT  抽象窗口工具集  Abstract  Windows Toolkit
	完成图形化用户界面的编程
	
	GUI 图形用户界面 Graphics User Interface 
	
	Swing  
	
	AWT 
	--Component  代表一个能以图形化方式显示出来,并可与用户交互的对象
	--MenuComponent  代表图形界面的菜单组件 
	
	Container  一种特殊的Component 可以装普通的Component
	LayoutManger 是管理其他组件布局的的方式
	
*/
/*
	2017-02-20 19:45:23
	AWT容器
	容器Container是Component的子类
	容器对象本身也是一个组件具有组件的所有性质
	可以调用Component类的所有方法
	
	Container
	---Window 
		--Frame 窗口   
			Frame 对象有标题,允许通过拖拉来改变窗口的位置、大小
			初始化时为不可见,可用setVisible 显示出来
			默认使用BorderLayout作为布局管理器
		--Dialog 对话框
	---Pannel 可以作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中(Windows、Panel、Applet)
	---ScrollPane 
	
	Panel 是awt中的另一个典型的容器,
	是一个不1能独立存在、必须放在其他容器中的容器
	外在表现是一个矩形,可以盛装其他组件
		作为容器存放其他组件
		不能单独存在
		默认使用FlowLayout 作为其布局管理
*/
/*
	2017-02-20 20:52:22
	LayoutManager  可以根据运行平台来调整组件的大小
	为容器指定布局管理器通过容器对象的setLayout(LayoutManager lm)方法来完成
	-----FlowLayout
		FlowLayout 布局管理器,组件像流水一样向某个方向流动排列,遇到边界就重头开始排列
		默认从左向右排列所有的组件,遇到边界就从下一行重新开始
	-----BorderLayout
		BorderLayout 将容器分为EAST  SOUTH  WEST  NORTH CHENTER
		组件可以放置在这五个区域
		没有指定区域,默认添加到中间
		同一个区域添加多个组件式,最后放入的组件会覆盖先放入的组件
		Frame Dialog ScrollPane 默认使用的就是BorderLayout 布局管理
	-----GridLayout
		GridLayout 布局管理器将容器分割成纵横分割的网格,每个网格所占的区域大小相同,
		添加组件时,默认从左向右、从上向下依次添加的每个网格中
		各个组件的大小由组件所处的区域来决定(每个组件自动占满整个区域)
	-----GridBagLayout
		GridBagLayout 布局管理器
		一个组件可以跨越一个或多个网格,并可以设置各网格的大小互不相同
		组件的大小随容器的增大而增大,则必须同时设置控制该组件的GridBagConstraints对象的fill属性和weightx,weighty属性
		
		功能强大,过于复杂,Swing引入一个新的布局管理器BoxLayout
	-----CardLayout
		CardLayout管理器以时间而非空间管理它里面的组件,它将加入容器的所有组件看成一叠卡片,每次只有上面的那个Componet才看见
	Swing 还提供了一个BoxLayout布局管理器
	
	绝对定位
	将Container的布局管理器设成null:setLayout(null)
	向容器中添加组件是,先调用setBounds()或者setSize方法来设置组件的大小、位置,或者直接创建GUI组件时通过构造参数指定该组件的大小、位置,然后将该组件添加到容器中
	绝对定位可能导致该GUI界面失去跨平台特性
		
*/

/*
	2017-02-20 21:51:32
	BoxLayout布局管理器
	BoxLayout可以在垂直和水平两个方向上摆放GUI组件
	BoxLayout 通常和Box容器结合使用,Box是一个特殊的容器,
	
	一旦获得Box容器之后,可以使用Box来盛装普通的GUI组件
	然后将这些Box组件添加到其他容器中
	
*/
/*
	2017-02-20 21:57:44
	Dialog对话框
	是window类的子类 是一个容器类,属于特殊组件
	对话框可以独立存在的顶级窗口
	对话框通常依赖于其他窗口,就是通常有一个parent窗口
	
	有非模式 non modal  和模式 modal  两种 
	当某个模式对话框被打开之后,该模式对话框有多个重载的构造器
	owenr 指定该对话框所依赖的窗口或对话框
	title 指定窗口标题
	modal指定对话框是否是模式的
	
	不管是模式对话框还是非模式对话框,打开后都无法关闭,因为程序没有为这两个对话框编写时间监听器
	主程序打开对话框里里接受输入值,应该把该对话框设置成模式对话框,因为模式对话框会阻塞该程序
	如果没有设置成非模式对话框
	用户没有操作,也没有输入
	会引发主程序的异常
	
*/

/*
	2017-02-20 22:05:57
	事件处理
	Event Source  事件源:事件发生的场所,通常就是各个组件
	Event事件 事件封装了GUI组件上发生的特定事情
	Event Listener 事件监听器 负责监听时间源所发生的事件,并对各种时间做出响应处理
	
	事件相应的动作实际上就是一系列的程序语句,通常以方法的形式组织起来,
	方法不能独立存在,以类的形式组织起来这些方法
	事件监听器的核心就是它所包含的方法
	这些方法也被称为事件处理器(Even Handler)
	
	当事件源上的事件发生时,事件对象会作为参数传给事件处理器,也就是时间监听器的实例方法
	
	
	AWT 的事件处理机制是一种委派式Delegation事件处理方式
	普通组件(事件源)将事件的处理工作委托给特定的对象(事件监听器)
	当改时间源发生指定的事件时
	就通知事件监听器,
	由事件监听器来处理
	
	
	每个组件均可以针对特定的事件指定一个或多个事件监听对象
	每个事件监听器也可以监听一个或多个事件员
	同一个事件源可能发生多种事件
	委派式事件处理方式可以把事件源上可能发生的不听的事件分别授权给不同的事件监听器
	一类事件都可以使用同一个事件监听器来处理
	
	
	
	事件处理流程
	事件监听器  注册到  事件源
	
	事件源    触发   事件    生成事件对象  
	
	事件作为参数传给  触发事件监听器
	
	事件监听器做出响应
	
	
	实现AWT事件处理机制的步骤
	实现事件监听器类,必须实现一个XXXListener接口
	创建普通组件(事件源),创建事件监听器对象
	调用addXXXListener方法将事件监听器对象注册给普通组件(事件源)
	当事件源上发生指定事件时,AWT会触发事件监听器,由事件监听器调用相应的方法(事件处理器)
	事件源上所发生的事件,会作为参数传入事件处理器
	
	
	事件源   就是new 一个AWT组件, 该组件就是事件源
	事件	是系统自动产生的
	事件监听器是整个事件处理的核心
	
	EventObject	
		-AWTEvent
			-AWT事件类
	
	
*/
/*
	2017-02-20 22:44:25
	
	AWT 事件分为两大类
	低级事件
	ComponentEvent  组件事件
	ContainerEvent  容器事件
	WindowEvent 	窗口事件
	FocusEvent	 焦点事件
	KeyEvent 键盘事件
	MouseEvent   鼠标事件
	PaintEvent  组件绘制事件
	
	高级事件
	高级事件是基于语义的事件
	可以不和特定的动作相关联,而依赖触发此事件的类
	
	EventObject
	-AWTEvent
		-----ActionEvent  动作事件
		-----AdjustmentEvent 调节事件  滚动条
		-----TextEvent	文本事件
		-----itemEvent  选项事件
		-----ComponentEvent
			-----ContainerEvent
			-----FocusEvent
			-----WindowEvent
			-----PaintEvent
			-----InputEvent
				--KeyEvent
				--MouseEvent

	对应的事件就有相应的监听器Listener
	
	事件处理模型
	当事件源组件上发生事件时,系统将会执行该事件源组件的所有监听器里的对应方法
	
	普通的java程序里的方法由程序主动调用
	事件处理中的事件处理器方法由系统负责调用
	
	
*/
/*
	2017-02-20 22:56:48
	事件适配器Adapter
	是监听器接口的空实现
	事件适配器实现了监听器接口
	并未改接口里的每个方法都提供了实现
	这种实现是一种空实现,方法体为空
	
	当需要创建监听器时,可以通过继承事件适配器,而不是实现监听器接口
	
	事件适配器已经为监听器接口的每个方法提供了空实现
	所以程序无须实现监听器接口里的每个方法
	只需要重写自己有用的方法
	
	
	如果某个监听器接口只有一个方法,则该监听器接口就无须提供适配器
	该接口对应的监听器别无选择,只能重写该方法,
	如果不重写,就没必要实现该监听器
	
	包含多个方法的监听器接口都有一个对应的适配器
	只包含一个方法的监听器接口则没有对应的适配器

	2017-02-20 23:06:04
	身体是革命本钱,明天再继续
	这部分虽然不重要,但是要在用的时候能拿出来用就
	不是常用的东西,了解就好
*/

/*
	2017-02-21 09:00:47
	还是得继续看完
	使用内部类实现监听器 
	内部类形式:将事件监听器类定义成当前类的内部类
	外部类形式:将事件监听器定义成一个外部类   使用较少
	类本身作为事件监听器类:让当前类本身实现监听器接口或继承事件适配器
	匿名内部类形式:使用匿名内部类创建事件监听器对象  			推荐使用
*/

/*
	2017-02-21
	处理位图
*/
/*
	2017-02-21
	
*/
public class Awt {
	public static void main(String[] args) {
//		c1();
//		new SimpleMenu().init();
//	new draw().init();	
		
	}

	/*
		2017-02-20 20:50:33
	
	*/
	private static void c1() {
		Frame frame = new Frame("测试窗口");

		Panel panel = new Panel();  //创建一个容器
		panel.add(new Button("按钮"));  //在容器上添加一个按钮
		frame.add(panel);  //将容器添加到窗体上
		
		ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);  // 在scrollPane 中添加scrollbar  总是具有滚动条
		scrollPane.add(new Button("scrollPane button"));
		frame.add(scrollPane);
		
		frame.setVisible(true);
		
		frame.setBounds(0, 0, 800, 600);
	}
}
/*
	2017-02-21
	AWT  绘画
	Component 类
	paint 绘制组件外观
	update  调用paint 方法 刷新组件外观
	repaint 调用update 刷新组件外观
	
	repaint -> update -> paint
	
	Graphics 是一个抽象的画笔对象
	
	drawLine 
	drawString
	drawRect  矩形
	drawRoundRect 圆角矩形
	drawOval  椭圆
	drawPolygon	 多边形边框
	等等
	
	
	Canvas 类  作为绘图的画布 
	程序可以通过创建Canvas子类
	并重写paint方法实现绘图
	
 */


class draw{
	private final String RECT = "rect";
	private final String OVAL = "oval";
	
	private Frame frame = new Frame("draw");
	
	private Button rect = new Button("rect");
	private Button oval =  new Button("ovla");
	private String shape ="";
	 
	private mycan mycan = new mycan();
	
	public void init() {
			
		Panel panel = new Panel();
		rect.addActionListener(e ->{
			shape = RECT;
			mycan.repaint();
		});
		
		oval.addActionListener( e ->{
			shape = OVAL;
			mycan.repaint();
		});
		
		panel.add(rect);
		panel.add(oval);
		mycan.setPreferredSize(new Dimension(222, 222));
		frame.add(mycan);
		frame.add(panel,BorderLayout.SOUTH);
		
		
		}
	class mycan extends Canvas{
		@Override 
		//重写canvas 中的paint方法
		public void print(Graphics g) {
			
			
			Random random = new Random();
			if (shape.equals(RECT)) {
				g.setColor(new Color(100, 100, 50));
				g.drawRect(random.nextInt(111), random.nextInt(111), 11, 11);
			}	
			
			if (shape.equals(OVAL)) {
				g.setColor(new Color(112, 22, 1));
				g.drawRect(random.nextInt(111), random.nextInt(111), 11, 11);
			}
			super.print(g);
		}
		
	}
	
}


/*
	2017-02-21
	image 抽象类代表位图,但是是一个抽象类
	无法直接创建image对象
	java提供了一个BufferedImage子类
	这个子类是一个可访问图像数据缓冲区的Image实现类
	
	imageIO
	
	ImageReader
	ImageWriter
	
	
	拖放功能
*/
class imagej{
	//	BufferedImage bufferedImage = new BufferedImage(width, height, imageType)
		
			
	Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
//	创建系统剪切板
			
			
			
			
			
			
			
			
			
			
}




/*
	2017-02-21
	
*/
class SimpleMenu{
	 //把窗体所需的组件写出来
	private Frame f = new Frame("测试");  //添加一个窗体
	private MenuBar menuBar = new MenuBar(); //添加菜单栏
	
	Menu file = new Menu("File"); // 文件选项
	Menu edit = new Menu("Edit");// 编辑选项
	Menu source = new Menu("Sorce");
	Menu renfacetor	 = new Menu("Renfacetor");
	Menu navigate = new Menu("Navigate");
	Menu search = new Menu("Search");
	Menu project = new Menu("project");
	Menu run = new Menu("Run");
	Menu window = new Menu("Window");
	Menu help = new Menu("Help");
	
	MenuItem newItem = new MenuItem("new");  // new 子选项
	MenuItem saveItem = new MenuItem("save");  //save 子选项
	MenuItem exitItem = new MenuItem("exit",new MenuShortcut(KeyEvent.VK_X));   //exit 子选项   带快捷键
	
	CheckboxMenuItem autoWrap = new CheckboxMenuItem("autoWrap");	// 可选择的菜单项
	MenuItem copyItem = new MenuItem("copyItem");  //copy子选项
	MenuItem pasteItme = new MenuItem("pastItem"); 
	
	Menu format = new Menu("format");   //  edit 的子菜单 format  有下一级选项
		MenuItem commentItem = new MenuItem("commentItme", new MenuShortcut(KeyEvent.VK_SLASH,true));  //
		MenuItem cancelItem = new MenuItem("cancelItem");

		
//	private TextArea ta = new TextArea(6,40);

	public void init() {
		ActionListener menuListener = e -> {
			String cmd = e.getActionCommand();
//			ta.append(" dan ji “" + cmd + "”cai dan");
			if (cmd.equals("exit")) {
				System.exit(0);
			}
		};  // lambda 表达式创建菜单事件监听器
		
		commentItem.addActionListener(menuListener);  // 子选项 也就是组件   事件源   添加事件监听器
		exitItem.addActionListener(menuListener);
		newItem.addActionListener(menuListener);
		
		file.add(newItem);  //在file 下添加 子选项
		file.add(saveItem);
		file.add(exitItem);
		
		edit.add(autoWrap); // 在edit 下添加子选项
		edit.addSeparator();  //添加菜单分割线
		edit.add(copyItem);
		edit.add(pasteItme);

		edit.add(new MenuItem("-"));

		edit.add(format);
			format.add(commentItem);  
			format.add(cancelItem);
		
		menuBar.add(file);    //在菜单栏上添加菜单选项
		menuBar.add(edit);
		menuBar.add(source);
		menuBar.add(renfacetor);
		menuBar.add(navigate);
		menuBar.add(search);
		menuBar.add(project);
		menuBar.add(run);
		menuBar.add(window);
		menuBar.add(help);
		f.setMenuBar(menuBar);  // 给窗口设置菜单条
		//匿名内部类形式创建事件监听器对象
		f.addWindowListener( new WindowAdapter() {
			public void windowClosing(WindowEvent event) {
				System.exit(0);
			}
		});
//		f.add(ta);
		f.setVisible(true);
		f.setBounds(0, 0, 800, 600);

	}
	
}



class PopuMenuTest{
	//这是一个右键菜单 没见用到过 跳过
	private TextArea textArea = new TextArea(4,30);
	private Frame frame =  new Frame("ceshi2");
	PopupMenu popupMenu = new PopupMenu() ;
	CheckboxMenuItem checkboxMenuItem = new CheckboxMenuItem("");
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值