黑马程序员—GUI(图形用户界面)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员—GUI(图形用户界面)

GUI

Graphical User Interface(图形用户接口)。

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

   CLI

Command line User Interface (命令行用户接口)

就是常见的 Dos 命令行操作。

需要记忆一些常用的命令,操作不直观。

举例:

比如:创建文件夹,或者删除文件夹等

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

Act 和 Swing

Awt 与 Swing

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

重量级控件。

javax.Swing:在 AWT 的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且

完全由 Java 实现。增强了移植性,属轻量级控件。


2、布局管理器


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

常见的布局管理器:

FlowLayout(流式布局管理器)//目前最常用的

从左到右的顺序排列。

Panel 默认的布局管理器。

BorderLayout(边界布局管理器)

东,南,西,北,中

Frame 默认的布局管理器。

GridLayout(网格布局管理器)

规则的矩阵

CardLayout(卡片布局管理器)

选项卡

GridBagLayout(网格包布局管理器)

非规则的矩阵

使用方法:new frame().setLayout(new FlowLayout());

创建图形化界面:

1,创建 frame 窗体。

2,对窗体进行基本设置。

 比如大小,位置,布局。

3,定义组件。

4,将组件通过窗体的 add 方法添加到窗体中。

5,让窗体显示,通过 setVisible(true)

Eg:一个简单的窗体

3、事件监听机制组成
事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)
事件监听机制流程图

<span style="font-size:18px;">import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class SwingDemo
{
	public static void main(String[] args)
	{
		JFrame f = new JFrame();
		f.setBounds(300,100,500,400);
		f.setLayout(new FlowLayout());
		JButton but = new JButton("我是一个按钮");
		f.add(but);
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
		{
		System.exit(0);
		}
		});
		f.setVisible(true);
	}
}</span>

3、事件监听机制组成
事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)

事件监听机制流程图


务必记牢:
确定事件源(容器或组件)
通过事件源对象的 addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收 XXXListener 的子类对象,或者 XXXListener 的子类 XXXAdapter 的子类对
象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是 XXXEvent 类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。 (其中包括事件源对象。通过 getSource()
或者,getComponent()获取。 )
事件源:就是 awt 包或者 swing 包中的那些图形界面组件。

事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在 java 中都已经定义好了。直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理

Eg:

package june610;
import java.awt.*;

class MyWin extends WindowAdapter{
	public void windowClosing(WindowEvent e){
		System.out.println("hahahha");
		System.exit(0);
	}
}
public class FrameDemo {
	//如果写成内部类的形式那么前面必须加上publicstatic,因为主方法是静态的,不能调用动态类或者方法
	public static void main(String[] args) {
		//设置窗体
		Frame f = new Frame("窗体");
		f.setSize(400, 300);
		f.setLocation(500, 300);//距离左侧,距离上面
		/**可以用这个方法一次性设置
		* setBounds(int x, int y, int width, int height) 移动组件并调
		整其大小。
		*/
		Button b = new Button("按钮");
		Button b2 = new Button("按钮2");
		TextField tf = new TextField(20);
		f.add(b);//把按钮添加到窗体上
		f.add(b2);//把按钮添加到窗体上
		f.add(tf);//在窗体上的的顺序按照添加的顺序
		f.setLayout(new FlowLayout());//设置容器的布局管理器
		//f.addWindowListener(new MyWin());
		b.addActionListener(new ActionListener(){
				//通过匿名内部类,方便添加动作监听器
				public void actionPerformed(ActionEvent e) {
					System.out.println("按钮把界面关闭了");
					//System.exit(0);
					}
		});
	//鼠标
	b.addMouseListener(new MouseAdapter() {//鼠标动作监听器
			int count = 1;
			public void mouseEntered(MouseEvent e){
				System.out.println("鼠标进入"+(count++)+"次!");
				}
		});
	b.addMouseListener(new MouseAdapter(){//和上面的一样,可以写在一起
			int clickCount = 1;
			public void mouseClicked(MouseEvent e){
			if(e.getClickCount() == 2){
				System.out.println("双击动作"+clickCount++);
				}
			}
	});
	/*
	f.addWindowListener(new WindowAdapter()//匿名内部类的写法
	{
	public void windowClosing(WindowEvent e)
	{
	System.out.println("我关");
	System.exit(0);
	}
	public void windowActivated(WindowEvent e)
	{
	System.out.println("我活了。");
	}
	public void windowOpened(WindowEvent e)
	{
	System.out.println("我被打开了,hahahhahah");
	}
	});*/
	//键盘:
	b2.addKeyListener(new KeyAdapter() {
		public void keyPressed(KeyEvent e)
		{
			System.out.println("键盘的作用");//用鼠标按没反应,
			System.out.println(e.getKeyChar()+"---"+e.getKeyCode());//f---70等、
			if(e.getKeyCode() == 27){//按住esc键退出
			System.out.println("ESC键把我关闭了!");
			System.exit(0);
			}
			//组合键去关闭 CTRL + ENTER
			if(e.isControlDown() && e.getKeyCode() ==
			KeyEvent.VK_ENTER){
					System.out.println("CTRL + ENTER组合键把我关闭了!");
					System.exit(0);
					}
				}
			});
	//文本框
	tf.addKeyListener(new KeyAdapter() {
		public void keyPressed(KeyEvent e){
			if(!(e.getKeyCode()>=KeyEvent.VK_0 &&
			e.getKeyCode()<=KeyEvent.VK_9)){
				System.out.println(e.getKeyChar()+"不符合是数字! ");
				}
			}
		});
		f.setVisible(true);//设置可见性
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值