黑马程序员_GUI

       ------- android培训java培训、期待与您交流! ----------

图形用户界面(GUI)
 计算机有两种方式和用户进行交互:
 命令行模式,以及窗口模式。
 java有两个专门的包用于图形化界面的编程
 Awt  Swing Awt 跨平台性不高,比较依赖于平台,重量级组件
 Swing则能够跨平台 。很多类都是基于Awt,轻量级组件
 eclipse开发工具是Swt包开发的图形化界面工具。

Frame类

 事件监听机制
  1.事件源
  2.事件
  3.监听器
  4.事件处理
  事件源就是awt包或者swing包中的那些图形界面组件
  事件:每一个事件源都有自己特有的对应事件和共性事件
  监听器:将可以触发某一事件的动作都已经封装到了监听器当中
  以上三者在java中都已经定义好了
  直接获取其对象来用就可以
  我们要做的事情就是对要产生的动作进行处理
  
  组件的布局方式:
   FlowLayout(流式布局)
  从左到右的顺序排列
  BorderLayout(边界布局管理器)
  东,南,西,北,中
  Frame默认的布局管理器
  GridLayout(网格式布局管理器)
  规则的矩形
  CardLayout(卡片式布局管理器)
  选项卡
  GridBagLayout(网格包布局管理器)
 非规则矩阵
  图形化界面是另外的线程控制的。
  
  1.创建frame窗体。
  2.对窗体进行基本设置
   比如大小,位置,布局。
  3.定义组件。
  4.将组件通过窗体的add方法添加到窗体中。
  5.让窗体显示,通过setVisible(true)

public class GUIdemo02 {

	public static void main(String[] args) {
		Frame f=new Frame("my awt");//具备一个默认的布局,叫做边界布局。
		f.setLayout(new FlowLayout());//设置为一个流式布局。
		f.setSize(500,500);//500是窗体的横坐标,100是纵坐标。
		f.setLocation(300,200);//是设置该窗体出现的位置。
		Button b=new Button("我是一个按钮");//创建一个按钮
		f.add(b);//容器添加按钮。
		f.addWindowListener(new WindowAdapter(){//WindowAdapter是一个实现了WindowListener接口的抽象类,
			public void windowClosing(WindowEvent e){
				System.out.println("我关");
				System.exit(0);//此方法需要加参数,关闭窗口意味着退出java虚拟机就行
			}
			public void windowActivated(WindowEvent e){
				System.out.println("我活了");
			}//该方法是复写了窗口被前置时的动作,只要窗口被前置,就会被监听到,然后打印我活了
			public void windowOpened(WindowEvent e){
				System.out.println("我被打开了,哈哈哈哈哈");
			}//该方法在窗口被建立时被监听然后打印我被打开了,哈哈哈哈哈
		});//该方法接收一个监听器用于监听事件,其中需要复写的方法就是对应的处理动作,比如说
		   //关闭的方法就是退出java虚拟机,因为虚拟机一退出该窗体的线程就关闭了。方法的参数e是
		   //事件信息,可以打印出来。
		f.setVisible(true);//创建一个窗体必须调用的方法。
		//图形化界面是由另外一个线程控制的。
	}

}

以下代码演示让按钮具备退出功能:

public class GUIdemo23 {
	private Frame f;
	private Button buf;
	private TextField tf;
	GUIdemo23(){
		init();
	}
	public void init(){
		f=new Frame();
		buf=new Button("my button");
		tf=new TextField(20);//文本框组件
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		f.add(buf);
		f.add(tf);
		MyEvent();
		f.setVisible(true);
		}
	public void MyEvent(){
		buf.addActionListener(new ActionListener(){
			//add方法是添加监听器的方法,添加的监听器是一个接口,用匿名内部类的
			//形式将这个接口实现
			public void actionPerformed(ActionEvent e){
				//实现该方法,里面的exit退出java虚拟机的方法
				//参数是可以打印动作的名字,
				//该方法会监听无论是鼠标还是键盘这样的事件都会起作用
				
				System.out.println("按钮干的");
				System.exit(0);
			}
		});//button的监听处理事件机制,
		f.addWindowListener(new WindowAdapter(){//这个WindowAdapter类就是该接口的一个适配器,貌似实现了
			//该接口,事实上是把该接口中的方法都复写为实例方法,但是方法体还是为空,就是说没有具体实现,我们在使用时
			//还是需要创建该类的子类对象复写里面我们需要用的方法,而且这个WindowAdapter类是一个抽象类。
			public void windowClosing(WindowEvent e){
				System.out.println("是窗体关的");
				System.exit(0);
			}
		});//窗体的监听事件
		buf.addMouseListener(new MouseAdapter(){
			private int count;
			public void mouseClicked(MouseEvent e){
				
				System.out.println("单击事件"+count++);//该事件会先于button自身的按钮事件先执行
				
				
			}//鼠标事件被封装在MouseEvent,里面可以得到鼠标的一些事件
			//比如说鼠标单击次数可以通过一个方法得到,
		});
		buf.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				System.out.println(e.getKeyChar());//具体看一看KeyEvent类的方法。
			}
		});
		tf.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(!(e.getKeyCode()>=KeyEvent.VK_0&&e.getKeyCode()<=KeyEvent.VK_9)){
					System.out.println("输入的数值非法");
					e.consume();//该方法让满足条件的输入值无法添加进文本框。
					}
			}
		});
		
	}
	

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

	}

}

菜单的制作:

public class GUIdemo06 {
	private File file=null;
	private Frame f;
	private MenuBar mb;
	private MenuItem closeItem,openItem,saveItem,subItem;
	private Menu m,subM;
	private FileDialog openDia,saveDia;//显示保存或者打开文件的windows窗口。
	private TextArea ta;
	GUIdemo06(){
		init();
	}//构造函数可以如此调用其他函数。不知道静态函数可不可以。
	public void init(){
		f=new Frame("my window");
		f.setBounds(300,100,650,600);
		//f.setLayout(new FlowLayout());
		ta=new TextArea();
		mb=new MenuBar();//菜单栏
		m=new Menu("文件");
		subM=new  Menu("子菜单");
		openItem=new MenuItem("打开");
		saveItem=new MenuItem("保存");
		closeItem=new MenuItem("退出");
		m.add(openItem);
		m.add(saveItem);
		m.add(closeItem);
		subItem=new MenuItem("子条目");//菜单中添加子条目。注意只有Menu才能添加子菜单或者子条目。
		//条目不可以再添加。
		subM.add(subItem);
		m.add(subM);
		mb.add(m);
		openDia=new FileDialog(f,"我要打开",FileDialog.LOAD);//打开文件的模式,这里的我要
		//打开是该窗口弹出时的标题。
		saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE);//保存文件的模式。
		myEvent();
		f.add(ta);
		f.setMenuBar(mb);
		f.setVisible(true);
		
	}
	private void myEvent(){
		
		saveItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){//这个事件监听到键盘的回车键才会打开
				//前面的按钮监听到空格才会关闭,这说明对应的事件源监听的键盘事件也有对应处理机制。
				if(file==null){
					saveDia.setVisible(true);
					String dirPath=saveDia.getDirectory();
					String fileName=saveDia.getFile();
					
					if(dirPath==null||fileName==null)
						return ;
					file=new File(dirPath,fileName);
					}
				try{
					BufferedWriter bufw=new BufferedWriter(new FileWriter(file));
					String text=ta.getText();
					bufw.write(text);
					bufw.close();
				}catch(IOException es){throw new RuntimeException();}
				}
			});//保存文件。
		openItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				openDia.setVisible(true);
				String dirPath=openDia.getDirectory();
				String fileName=openDia.getFile();
				System.out.println("1");
				if(dirPath==null||fileName==null)
					return ;
				ta.setText("");
				System.out.println(dirPath+"...."+fileName);
				file=new File(dirPath,fileName);
				try{
					BufferedReader bufr=new BufferedReader(new FileReader(file));
					String line=null;
					while((line=bufr.readLine())!=null){
						ta.append(line+"\r\n");
					}
					bufr.close();
					
				}catch(Exception es){throw new RuntimeException("读取失败");}
			}
	});//打开文件。
		closeItem.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					System.exit(0);
				}
		});
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}

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

	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值