黑马程序员 GUI

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

GUI

1:GUI
(1)用户图形界面。
(2)Java对GUI的支持。
java.awt 跟系统关联性较强,属于重量级。
javax.swing 跟系统关联性较弱,属于轻量级。
(3)GUI体系
组件:就是有很多方法和属性的对象。
|--容器组件 就是可以存储容器组件和基本组件的组件
|--基本组件 就是可以直接显示在容器上的组件
(4)案例:
第一个窗体案例
/*
 * Frame:
 * 		Frame():构造一个最初不可见的 Frame 新实例
 * 		查看完毕所有构造,我们发现窗体竟然不可见的。请问你想到什么?
 * 		它肯定有方法提供,让该窗体可见。
 */
public class MyFrame {
	public static void main(String[] args) {
		// 创建窗体对象
		Frame f = new Frame();

		// 设置窗体标题
		// public void setTitle(String title)
		f.setTitle("Hello,GUI");
		// 设置窗体的坐标
		// public void setLocation(int x,int y)
		f.setLocation(400, 200);
		// 设置窗体大小
		// public void setSize(int width,int height)
		f.setSize(400, 300);

		// 设置窗体可见
		// public void setVisible(boolean b)
		f.setVisible(true);
		// System.out.println("over");
	}
}


对窗体案例进行关闭
public class MyFrame2 {
	public static void main(String[] args) {
		// 创建窗体对象
		Frame f = new Frame();

		// 设置窗体属性
		f.setTitle("关闭窗口");
		f.setSize(400, 300);
		f.setLocation(400, 200);

		// 用适配器类改进版
		f.addWindowListener(new WindowAdapter(){
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		// 设置窗体可见
		f.setVisible(true);
	}
}



在窗体添加按钮,并对按钮添加事情
/*
 * 在窗体上添加一个按钮。并对按钮添加一个事件,实现点击按钮,就在控制台输出一句话:201314
 * 
 * 分析:
 * 		A:创建窗体对象
 * 		B:创建按钮对象
 * 		C:把按钮添加到窗体上
 * 		D:把窗体显示出来
 * 
 * 注意:
 * 		不是每一个事件接口都有对应的适配器类。如果接口中的方法少于三个的时候,是不需要的。
 */
public class MyButton {
	public static void main(String[] args) {
		// 创建窗体对象
		Frame f = new Frame();
		// 设置属性
		f.setTitle("添加按钮");
		f.setSize(400, 300);
		f.setLocation(400, 200);
		// 重新设置窗体布局
		f.setLayout(new FlowLayout());

		// 创建按钮对象
		Button bu = new Button("我是按钮,点击试试");
		// bu.setSize(30, 20);

		// 把按钮添加到窗体上
		f.add(bu);

		// 注册事件
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		//对按钮添加事件
		bu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("201314");
			}
		});

		// 把窗体显示出来
		// 设置可见
		f.setVisible(true);
	}
}



在窗体上添加文本框和文本域

/*
 * 需求:把文本框的内容通过按钮点击显示到文本域中。
 */
public class MyText {
	public static void main(String[] args) {
		// 创建窗体对象
		Frame f = new Frame();
		// 设置窗体属性
		f.setTitle("文本组件");
		f.setSize(400, 300);
		f.setLocation(400, 200);
		f.setLayout(new FlowLayout());

		// 创建文本框,按钮,文本域对象
		// TextField(int columns)
		final TextField tf = new TextField(20);
		Button bu = new Button("转到");
		final TextArea ta = new TextArea(12, 40);

		// 把文本框,按钮,文本域对象添加到窗体对象上
		f.add(tf);
		f.add(bu);
		f.add(ta);

		// 注册事件
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		bu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 获取文本框的值
				// public String getText()
				String tf_str = tf.getText();
				// 清空操作
				tf.setText("");
				// 赋值给文本域
				// ta.setText(tf_str);
				// 我要追加数据,怎么办
				// void append(String str)
				ta.append(tf_str + "\r\n");
			}
		});

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


菜单案例
/*
 * 菜单栏:MenuBar
 * 		菜单 Menu
 * 			菜单
 * 				菜单项
 * 			菜单项 MenuItem
 * 
 * 
 */
public class MyMenu {
	public static void main(String[] args) {
		// 创建窗体对象
		Frame f = new Frame();
		f.setTitle("菜单案例");
		f.setSize(400, 300);
		f.setLocation(400, 200);

		// 创建菜单栏
		MenuBar mb = new MenuBar();
		// 创建菜单
		Menu m = new Menu("文件");
		// 创建菜单项
		MenuItem mi = new MenuItem("退出");
		// 谁添加谁?
		m.add(mi);
		mb.add(m);
		f.setMenuBar(mb);

		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		mi.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		// 设置窗体可见
		f.setVisible(true);
	}
}



多级菜单案例

/*
 * 1个Frame
 * 1个MenuBar
 * 2个Menu
 * 5个MenuItem
 */
public class MyMenu2 {
	public static void main(String[] args) {
		final Frame f = new Frame();
		f.setTitle("多级菜单");
		f.setSize(400, 300);
		f.setLocation(300, 200);
		final String name = f.getTitle();

		MenuBar mb = new MenuBar();

		Menu m1 = new Menu("文件");
		Menu m2 = new Menu("更改标题 ");

		final MenuItem mi1 = new MenuItem("好好学习");
		final MenuItem mi2 = new MenuItem("天天向上");
		MenuItem mi3 = new MenuItem("恢复标题");
		MenuItem mi4 = new MenuItem("打开记事本");
		MenuItem mi5 = new MenuItem("退出系统");

		m2.add(mi1);
		m2.add(mi2);
		m2.add(mi3);

		m1.add(m2);
		m1.add(mi4);
		m1.add(mi5);

		mb.add(m1);

		f.setMenuBar(mb);

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

		mi5.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		mi4.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 打开系统的记事本
				// public static Runtime getRuntime()
				Runtime r = Runtime.getRuntime();
				// public Process exec(String command)
				try {
					r.exec("notepad");
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		});
		
		mi1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				f.setTitle(mi1.getLabel());
			}
		});
		
		mi2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				f.setTitle(mi2.getLabel());
			}
		});
		
		mi3.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				f.setTitle(name);
			}
		});

		f.setVisible(true);
	}
}


(5)事件监听机制(理解)
A:事件源 事件发生的地方
B:事件 要发生的事情
C:事件处理 针对发生的事情的处理
D:事件监听 把事件源和事件进行关联
(6)适配器模式
如果接口中的方法较多,而我们有可能只使用其中的一个。
那么,我们就可以在在接口和具体的类之间插入一个适配器类。
做一次转换即可。


适配器类实现接口,把所有方法全部空实现。
具体的类继承适配器类,用哪个方法,重写哪个。



---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

你可能感兴趣的:(Java学习)