黑马程序员------Java基础学习------用户图形界面GUI

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


1、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(网格包布局管理器):非规则的矩阵

一个简单的窗体如下:
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);
    }
}

3、事件监听机制组成


事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)


事件监听机制流程图


事件源:就是awt包或者swing包中的那些图形界面组件。
   

事件:每一个事件源都有自己特有的对应事件和共性事件。

监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。

以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。

我们要做的事情是,就是对产生的动作进行处理。

class MyWin extends WindowAdapter{
	public void windowClosing(WindowEvent e){
		System.out.println("hahahha");
		System.exit(0);
	} 
}

public class FrameDemo {//如果写成内部类的形式那么前面必须加上public static,因为主方法是静态的,不能调用动态类或者方法
	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);//设置可见性

	}

}

列出文件夹内全部的文件
class MyFrame {
	private Frame f;
	private Button b;
	private TextField tf;
	private TextArea ta;

	MyFrame() {
		init();
	}

	void init() {
		f = new Frame("我的电脑");
		f.setBounds(300, 100, 600, 500);
		f.setLayout(new FlowLayout());
		b = new Button("转到");
		tf = new TextField(60);
		ta = new TextArea(25, 70);

		f.add(tf);
		f.add(b);
		f.add(ta);
		f.setVisible(true);
		action();
	}

	//窗体上的操作
	void action() {
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		buttonAction();
		keyAction();
	}
	void keyAction(){
		//设置键盘监听器,当输入enter键的时候实现和点击鼠标同样的功能!
		b.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e){
				//if(e.getKeyCode() == 10){
					//buttonAction();
				//}
				
				String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件
				File file = new File(dirPath);// 获取文件
				if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹
					ta.setText("");// 如果符合条件的话,清空以前的数据;
					String[] names = file.list();
					for (String name : names) {
						ta.append(name + "\r\n");
					}
					System.out.println("=======");
				} else {
					ta.setText("");
					ta.append("对不起,请确认您输入的是路径!");
				}
				
				System.out.println(e.getKeyCode());
			}
		});
		
		tf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件
				File file = new File(dirPath);// 获取文件
				if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹
					ta.setText("");// 如果符合条件的话,清空以前的数据;
					String[] names = file.list();
					for (String name : names) {
						ta.append(name + "\r\n");
					}
					System.out.println("=======");
				} else {
					ta.setText("");
					ta.append("对不起,请确认您输入的是路径!");
				}
			}
		});
	}
	
	void buttonAction() {
		b.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件
				File file = new File(dirPath);// 获取文件
				if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹
					ta.setText("");// 如果符合条件的话,清空以前的数据;
					String[] names = file.list();
					for (String name : names) {
						ta.append(name + "\r\n");
					}
					System.out.println("=======");
				} else {
					ta.setText("");
					ta.append("对不起,请确认您输入的是路径!");
				}
			}
		});
	}
}

public class FrameDemo3 {
	public static void main(String[] args) {
		new MyFrame();
	}
}

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值