Java学习日志(22-1-GUI概述与窗体事件)

为什么80%的码农都做不了架构师?>>>   hot3.png

GUI概述(图形用户界面)

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

        Awt:抽象窗口工具包,需要调用本地系统方法实现功能,属于重量级控件

        Swing:在Awt基础上建立的一套图形界面系统,提供了更多的组件

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

    继承关系图

/* 
Container可以添加组件,而同级的Button等不能
 */
Component
	|--Button
	|--Label
	|--Checkbox
	|--TextComponent
		|--TextArea
		|--TextField
	|--Container
		|--Window
			|--Frame
			|--Dialog
				|--FileDialog
		|--Panel

GUI布局

    常见的布局管理器:

        FlowLayout(流式布局管理器)

            从左到右顺序排列

            Panel的默认布局管理器

        BorderLayout(边界布局管理器)

            东南西北中

            Frame的默认布局管理器

        GridLayout(网格局部管理器)

            规则的矩阵

        GardLayout(卡片布局管理器)

            选项卡

        GridBagLayout(网格包布局管理器)

            非规则的矩阵

Frame

import java.awt.*;
class AwtDemo{
	public static void main(String[] args){
		// 创建Frame窗体
		Frame f=new Frame("my awt");
		// 对窗体进行基本设置
		f.setSize(500,400);
		f.setLocation(300,200);
		f.setLayout(new FlowLayout());
		// 定义组件
		Button b=new Button("我是一个按钮");
		// 添加组件
		f.add(b);
		// 使窗体可视
		f.setVisible(true);
		
	}
}

事件监听机制

    事件源(组件):awt/swing中的图形界面组件

    事件(Event):事件源有对应的特有事件和共性事件

    监听器(Listener):将可以触发某一事件的动作封装到监听器

**以上三者都已在Java中封装好,直接获取对象就可以

    事件处理(引发事件后处理方式)

窗体事件

import java.awt.*;
import java.awt.event.*;
class AwtDemo{
	public static void main(String[] args){
		// 创建Frame窗体
		Frame f=new Frame("my awt");
		// 对窗体进行基本设置
		f.setSize(500,400);
		f.setLocation(300,200);
		f.setLayout(new FlowLayout());
		// 定义组件
		Button b=new Button("我是一个按钮");
		// 添加组件
		f.add(b);
		// 添加窗体监听器
		f.addWindowListener(new MyWin(){
			// 窗体关闭
			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("我被打开了");
			}
		});
		
		
		
		// 使窗体可视
		f.setVisible(true);
		
		
	}
}
/*
class MyWin implements WindowListener{
	覆盖7个方法,只用到关闭动作,但必须复写
}

因为WindowListener的子类WindowAdapter已经实现了WindowListener接口
并覆盖了其中的所有方法,因此只需要继承自Windowadapter覆盖所需要的方法即可
 */
 class MyWin extends WindowAdapter{
	 public void windowClosing(WindowEvent e){
		 // System.out.println("window closing");
	 }
 }

    Action事件

import java.awt.*;
import java.awt.event.*;
class FrameDemo{
	// 定义该图形中所需组件的引用
	private Frame f;
	private Button but;
	FrameDemo(){
		init();
	}
	public void init(){
		f=new Frame("my frame");
		// 对frame进行基本设置
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		but=new Button("退出");
		// 将组建添加到Frame
		f.add(but);
		// 加载窗体事件
		myEvent();
		// 显示窗体
		f.setVisible(true);
	}
	private void myEvent(){
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		// 让按钮具备退出程序的功能
		/* 按钮就是事件源
			通过关闭窗体示例了解到,想要组件具备特有的监听器
			需要查看该组件对象的功能
			通过查阅Button的描述,发现按钮支持一个特有监听
		*/
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.out.println("exit");
				System.exit(0);
			}
		});
	}
	public static void main(String[] args){
		new FrameDemo();
	}
}

鼠标键盘事件

import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent{
	
	private Frame f;
	private Button but;
	private TextField tf;
	MouseAndKeyEvent(){
		init();
	}
	public void init(){
		f=new Frame("my frame");

		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		
		tf=new TextField(20);
		
		but=new Button("退出");

		f.add(but);
		f.add(tf);

		myEvent();

		f.setVisible(true);
	}
	private void myEvent(){
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		/* 鼠标监听
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent a){
				System.out.println("活动一次");
			}
		});
		
		but.addMouseListener(new MouseAdapter(){
			private int count=1;
			private int clickcount=1;
			public void mouseEntered(MouseEvent e){
				System.out.println("鼠标进入到该组件"+count++);
			}
			public void mouseClicked(MouseEvent e){
				if(e.getClickCount()==2){
					System.out.println("双击动作"+clickcount++);
				}
			}
		});
		*/
		
		tf.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(!(e.getKeyCode()>=KeyEvent.VK_0&&e.getKeyCode()<=KeyEvent.VK_9)){
					System.out.println(e.getKeyCode()+"......是非法的");
					e.consume();
				}
			}
		});
		
		// but键盘监听
		but.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
					// System.exit(0);
					System.out.println("control+enter is run");
				}
				// System.out.println(KeyEvent.getKeyText(e.getKeyChar())+">......<"+e.getKeyCode());
			}
		});
		
	}
	
	
	public static void main(String[] args){
		new MouseAndKeyEvent();
	}
}

练习-列出指定目录内容

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindowDemo{
	private Frame f;
	private TextField tf;
	private Button but;
	private TextArea ta;
	
	MyWindowDemo(){
		init();
	}
	public void init(){
		f=new Frame("my window");
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		
		tf=new TextField(30);
		but=new Button("转到");
		ta=new TextArea(15,40);
		
		f.add(tf);
		f.add(but);
		f.add(ta);
		
		myEvent();
		f.setVisible(true);
	}
	private void myEvent(){
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String dirPath=tf.getText();
				File dir=new File(dirPath);
				if(dir.exists()&&dir.isDirectory()){
					ta.setText("");
					String[]names=dir.list();
					for(String name:names){
						ta.append(name+"\r\n");
					}
				}
				// System.out.ptinlny(text);
			}
		});
		
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}
	
	
	public static void main(String[] args){
		new MyWindowDemo();
	}
}

 

转载于:https://my.oschina.net/Almon/blog/758076

你可能感兴趣的:(Java学习日志(22-1-GUI概述与窗体事件))