黑马程序员---java学习笔记之GUI

1、GUI,图像用户接口,是与命令行的交互模式相区别的。

2、java中有两个GUI的包,一个是java.Awt,另一个是javax.Swing.

3、java.Awt比较依赖于平台,意思是说,用该包做出来的界面风格与操作系统平台是有关系的,windows下和linux下是有些细微差别的,属于重量级组件,而javax.Swing包做出的界面什么样的就是什么样,不会随着操作系统平台的不同而不同,属于轻量级组件。

4、AWT包中主要类的层级关系:

Component

        |---Container

                |---Window

                        |---Frame

                        |---Dialog

                                |---FileDialog

                |---Panel

        |---Button

        |---Checkbox

        |---Label

        |---TextComponent

                |---TextField

                |---TextArea

5、Container作为一个组件,本身也可以通过add方法添加组件。

6、布局管理器有:流式布局,边界式布局,网格布局,网格包式布局,卡片式布局,坐标式布局。

7、一个窗体可以使用多个形式的布局管理器,这可以通过面板(Panel)实现,每个面板可以使用一种布局管理器。

8、事件监听机制:

        a):事件源

        b):事件

        c):监听器

        d):事件处理

9、监听器结尾都是listener。

10、窗体事件----关闭

Frame f = new Frame("myFrameDemo");
		f.setLocation(300,200);
		f.setSize(500,400);
		
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		f.setVisible(true);
11、窗口监听器WindowListener 的方法windowActivated,在被操作窗口处于最前端时即被调用;而方法windowOpened方法是在被操作窗口刚被打开时会被调用。

12、给某按钮添加监听器

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FrameButtonDemo {

	/**
	 *该程序的写法把图形用户组件的操作放在了init()方法中,把事件写在了myEvent方法中
	 *这种分开的写法可以使程序看起来更有条理性。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		new FrameButton();
	}

}
class FrameButton
{
	private Frame f;
	private Button b;
	FrameButton()
	{
		init();
	}
	
	void init()
	{
		f = new Frame("My Frame");
		f.setBounds(300,100,500,400);
		
		f.setLayout(new FlowLayout());
		b = new Button("按钮1");
		f.add(b);
		
		myEvent();
		
		f.setVisible(true);
	}
	void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println(e.toString());
				System.exit(0);
			}
		});
	}
	
}

13、给按钮添加活动监听器ActionListener和给按钮添加鼠标事件监听器MouseListener,事件触发监听器时,后者的处理函数先被执行。示例如下:

b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("action");
			}
		});
		
		
		b.addMouseListener(new MouseAdapter()
		{
			public void mousePressed(MouseEvent e)
			{
				System.out.println("mouse");
			}
		});
打印结果是mouse(换行)action

14、鼠标双击事件捕获并处理

b.addMouseListener(new MouseAdapter()
		{
			public void mouseClicked(MouseEvent e)
			{
				//间隔较短的双击可被捕获,间隔较大的双击(可视为两次独立的单击)则不能被捕获
				//这说明双击和两次单击是有点儿区别的。
				if( e.getClickCount() == 2 )
					System.out.println("双击被捕获");
			}
		});
15、

b.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				//某个键的名字是单个字符时,可以通过KeyEvent类中的getKeyChar方法获取
				System.out.println(e.getKeyChar()+"..."+e.getKeyCode());
				
				//某个键的名字是多个字符时就要通过getKeyText方法获取键名
				System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
				
			}
		});
16、视频中的例题

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public class TextDemo {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new FrameText();

	}

}
class FrameText
{
	private Frame f;
	private TextField tf;
	private TextArea ta;
	private Button b;
	
	
	FrameText()
	{
		init();
	}
	void init()
	{
		f = new Frame("TextFrameDemo");
		
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		
		tf = new TextField(40);
		b = new Button("转到");
		ta = new TextArea(25,70);
		
		f.add(tf);
		f.add(b);
		f.add(ta);
		
		
		myEvent();
		
		f.setVisible(true);
		
	}
	private void myEvent()
	{
		//窗体事件---关闭
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		//鼠标事件---按下
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				String strTemp = tf.getText();
				File file = new File(strTemp);
				
				ta.setText("");
				if( file.exists() )
				{
					if( !file.isDirectory() )
						ta.append(f.toString()+"\r\n");
					else
						process(file,0);
				
					tf.setText("");
				}
				else
				{
					final Dialog d = new Dialog(f,"提示信息",true);
					Label l = new Label("输入地址:"+strTemp+"错误!");
					Button okb = new Button("确定");
					
					d.setBounds(300,100,240,160);
					d.setLayout(new FlowLayout());
					
					d.add(l);
					d.add(okb);
					
					d.addWindowListener(new WindowAdapter(){
						public void windowClosing(WindowEvent e)
						{
							d.setVisible(false);
						}
					});
					okb.addActionListener(new ActionListener()
					{
						public void actionPerformed(ActionEvent e)
						{
							d.setVisible(false);
						}
					});
					
					
					d.setVisible(true);
					
				}
			}
		});
		
		
	}
	private void process(File dir,int level)
	{
		File[] files = dir.listFiles();
		ta.append(printBlank(level)+dir.getName()+"\r\n");
		level++;
		
		for( File file : files )
		{
			if( file.isDirectory() )
			{
				process(file,level);
			}
			else
			{
				ta.append(printBlank(level)+file.getName()+"\r\n");
			}
		}
			
	}
	private String printBlank(int level)
	{
		StringBuilder sb = new StringBuilder();
		for( int i = 0; i < level; i++ )
			sb.append("  ");
		sb.append("|---");
		return sb.toString();
	}
}
17、给一个窗体添加菜单

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FrameMenuDemo {

	public static void main(String[] args) {
	
		new FrameMenu();
	}

}
class FrameMenu
{
	private Frame f;
	private MenuBar mb;
	private Menu m;
	private Menu mi0;
	private MenuItem mi1;
	private MenuItem m1;
	
	FrameMenu()
	{
		init();
	}
	void init()
	{
		f = new Frame("MyFrameMenu");
		f.setBounds(300,100,500,400);
		f.setLayout(new FlowLayout());
		
		mb = new MenuBar();
		m = new Menu("文件");
		mi0 = new Menu("子菜单");
		mi1 = new MenuItem("退出");
		m1 = new MenuItem("子条目");
		
		mb.add(m);
		m.add(mi0);
		m.add(mi1);
		mi0.add(m1);
		
		
		f.setMenuBar(mb);
		
		myEvent();
		
		f.setVisible(true);	
	}
	
	void myEvent()
	{
		f.addWindowListener(new WindowAdapter(){
			
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
			
		});
		mi1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		
		
	}
	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值