黑马程序员-GUI

java.Awt:  Abstract Window ToolKit  需要调用本地方法实现功能,属重量级控件。
java.Swing:在AWT的基础上,建立一套图形界面系统。其中提供了更多的的组件。增强了移植性。  

基础关系图:


Componet:组件。
container:容器。

Label:标签,封装文字
Checkbox:复选框。
TextArea:文本区域。
TextField:文本框。

window:窗口。
Panel:面板。窗体中使用多种布局时使用。
Frame:框架。
Dialog:对话框。 

布局:组件的排放方式。
new FlowLayout():流式布局,从左到右顺序排列。默认是居中。panel的默认布局。
new BorderLayout():边界布局,东南西北中。Frame的默认布局。没有指定方向会自动填充窗体。
new GridLayout():网格布局。规则的矩阵。(计算器)。
new CardLayout():卡片布局。选项卡 (右键属性)
new GridBagLayout():网格包布局。非规则矩阵。
 定义图形化界面的一般步骤:
1,创建窗体。
2,进行基本设置。大小,位置,布局。
3,定义组件。
4,将组件add到窗体中。
5,将窗体显示。setVisible(true)

事件监听机制:


特点:
1,事件源:就是awt包或者swing包中的那些图形界面的组件
2,事件:每一个事件源都有自己特有的对应事件和共性事件。
3,监听器:将可以触发某个事件的动作(不止一个)都已经封装到了监听器当中。
4,事件处理。

事件监听示例:
例如。窗口关闭。使用addWindowListener(WindowListener l),由于WidowListener接口中的抽象方法过多。所以定义了一个类WindowAdapter实现了WindowListener的抽象方法。但是方法为空。定义为抽象的,所以现在就可以使用WindowListener的子类当作参数传递了。想监听什么动作,就复写几个方法。

鼠标事件MouseEvent内部有获取鼠标键和次数的方法。

键盘事件对象KeyEvent内部有getKeyCode()和getKeyTest().内部大量常量值。可以用来做判断。
InputEvent 有判断组合键是否按下的方法。consume()取消默认的处理方式。屏蔽键。

import java.awt.*;
import java.awt.event.*;
class FrameDemo 
{
	public static void main(String[] args) 
	{
		Frame f = new Frame("hehe");
		f.setBounds(350,150,600,400);
		f.setVisible(true);
		f.setLayout(new FlowLayout());
		TextField tf = new TextField(20);
		f.add(tf);
		Button b = new Button("按钮");
		f.add(b);
		
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				if(!(e.getKeyCode()>=KeyEvent.VK_0&&e.getKeyCode()<=KeyEvent.VK_9))
					//屏蔽键
					e.consume();
			}
		});
		b.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					System.out.print("enter");
			}
		});
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("anxia");
			}
		});
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
}
new Dialog(依附的窗体,名字,是否锁定当前窗体)

Menu:菜单。
MenuBar:菜单栏。
MenuItem:条目。
菜单栏与窗体相关联用Frame f; f.setMenuBar(mb);
MenuBar只能添加Menu,  Menu可以添加Menu或者MenuItem,添加的Menu还可以有子菜单。

FileDialog:调用系统资源的文件打开和储存的对话框。
new FileDialog(f,name,FileDialog.LOAD)
new FileDialog(f,name,FileDialogSAVE)
此对象有获取选择文件名和路径的方法(包括存储时填写的文件名和当前路径)。分别为getFile()和getDirectory()。

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MenuDemo 
{
	private Frame f ;
	private TextArea ta;
	private MenuBar mb;
	private Menu m1,m2;
	private MenuItem open,othersave,exit,save;
	private Dialog d ;
	private Button b;
	private Label lb;
	private File file;
	private FileDialog fdopen;
	private FileDialog fdsave;
	MenuDemo()
	{
		init();
	}
	public void init()
	{

		f=new Frame("记事本");
		ta=new TextArea(40,50);
		mb=new MenuBar();
		m1=new Menu("菜单");
		m2=new Menu("子条目");
		open=new MenuItem("打开");
		othersave=new MenuItem("另存为");
		save=new MenuItem("保存");
		exit=new MenuItem("退出");
		d =new Dialog(f,"错误",true);
		b=new Button ("确定");
		lb = new Label("文件类型错误,只支持.txt或者.java文件");
		fdsave= new FileDialog(f,"另存为",FileDialog.SAVE);
		fdopen= new FileDialog(f,"打开",FileDialog.LOAD);

		f.setMenuBar(mb);
		mb.add(m1);
		m1.add(m2);
		m2.add(open);
		m2.add(save);
		m2.add(othersave);
		m1.add(exit);
		d.setBounds(450,200,300,100);
		d.setLayout(new FlowLayout());
		
		d.add(lb);
		d.add(b);
		f.setBounds(350,100,500,400);
		f.add(ta);
		f.setVisible(true);
		myevent();
	}
	public void myevent()
	{
		
		
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		exit.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		open.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				ta.setText("");
				fdopen.setVisible(true);
				String s = fdopen.getFile();
				String s1 =fdopen.getDirectory();
				if(s==null||s1==null)
					return;
				if(s.endsWith("java")||s.endsWith("txt"))
				{
					file=new File(s1,s);
					BufferedReader br=null;

				try
				{
					br = new BufferedReader(new FileReader(file));
				    String line=null;
					while((line=br.readLine())!=null)
				{
					ta.append(line+"\r\n");
				}
				br.close();
				}
				catch (IOException ex)
				{
					throw new RuntimeException("读取失败");
				}
				}
				else
				{
					d.setVisible(true);

				}		
				
			}
		});
		save.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				BufferedWriter wr=null;
				if(file==null)
				{
					othersave();
				}
				else
				{
					try
					{
						wr=new BufferedWriter(new FileWriter(file));
						wr.write(ta.getText());
						wr.close();
					}
					catch (IOException ex)
					{
						throw new RuntimeException("保存失败");
					}	
				}

			}
		});
		othersave.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				othersave();
			}
		});
		
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				d.setVisible(false);
			}
		});
		
	}
	public void othersave()
	{
			//建立文件名过滤器
			FileDialog fdsave=new FileDialog(f,"打开",FileDialog.LOAD);
			File file=null;
			FilenameFilter ff=new FilenameFilter()	
			{
				public boolean accept(File dir,String name)
				{
					return dir.getName().endsWith("java")||dir.getName().endsWith("txt");
				}
			};
				
			fdsave.setFilenameFilter(ff);
				
			fdsave.setVisible(true);
			String s2=fdsave.getFile();
			String s3 =fdsave.getDirectory();
			if(s2==null||s3==null)
				return;
			file =new File(s3,s2);
			try
			{
				if(!(file.exists()))
					file.createNewFile();
			}
			catch (IOException ex)
			{
				throw new RuntimeException("建立失败");
			}
				
			BufferedWriter bw =null;
			try
			{
				bw=new BufferedWriter(new FileWriter(file));
					
				bw.write(ta.getText());
				bw.close();
			}
			catch (IOException ex1)
			{
				throw new RuntimeException("保存失败");
			}
					
	}
	public static void main(String[] args) 
	{
		new MenuDemo();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值