黑马程序员--------java GUI图形界面编程

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

GUI(图形用户界面)

1、GUI

  *Graphical User Interface(图形用户接口)

   *用图形的方式,来显示计算机操作的界面,这样更方便更直接

2、CLI

  *Command Line User Interface(命令行用户接口)

   *就是常见的Dos 命令行操作,需要记忆一些常用命令,操作不直观

3、java为GUI提供的对象都存在java.Awt和javax.Swing两个包中

4、Awt与Swing

  *java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。比较依赖平台,跨平台稍有不足

  *javax.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属于轻量级控件

                   

布局管理器

1、容器中的组件的排放方式,就是布局

2、常见的布局管理器:

   *FlowLayout(流式布局管理器)

      从左到右的顺序排列,Panel默认的布局管理器

  *BorderLayout(边界布局管理器)

      东、南、西、北、中。Frame默认的布局管理器

  *GridLayout(网格布局管理器)

      规则的矩阵

  *CardLayout(卡片布局管理器)

      选项卡

  *GridBagLayout(网格包布局管理器)

      非规则的矩阵

Frame

创建图形化界面步骤:1、创建frame窗体

                    2、对窗体进行基本设置,如大小位置

                    3、定义组件,如按钮、文本框、文本区

                    4、将组件通过窗体的add方法添加到窗体中

                    5、让窗体显示,通过setVisible(true)

 

事件监听机制

事件监听机制组成:

1、事件源(组件); 就是awt包或者swing包中的那些图形界面组件

2、事件(Event): 每一个事件源都有自己特有的对应事件和共性事件

3、监听器(Listener): 将可以触发某一事件的动作(不止一个)都已经封装到监听器

以上三者在java中都已经定义好了,直接获取其对象来用就可以了,我们要做的是,就是对产生的动作进行处理

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

                  

窗体事件

import java.awt.*;
import java.awt.event .*;
class AwtDemo 
{
	public static void main(String[] args) 
	{
		Frame f = new Frame("关军波");
		f.setSize(500,400);//设置窗体大小
		f.setLocation(400,200);//设置窗体相对于左上角的偏移量
		f.setLayout(new FlowLayout());//设置窗体布局为流式布局
		//f.addWindowListener(new MyWin());//只需一个方法,也可以写成匿名内部类形式
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
			public void windowActivated(WindowEvent e)//处于窗口最前端就被激活
			{
				System.out.println("活了");
			}
			public void windowOpened(WindowEvent e)//窗口被创建时动作
			{
				System.out.println("被创建了");
			}	
		});

		Button b = new Button("按钮");//添加按钮
		Button b1 = new Button("按钮2");

		f.add(b);//将按钮用容器的方法添加进窗体
		f.add(b1);
		f.setVisible(true);
		System.out.println("Hello World!");
	}
}
/*
class MyWin implements WindowListener
{
	//覆盖7个方法,但是只需要用到一个关闭动作,
	//其他动作都没用到,但是必须要复写所有
}
*/
//发现WindowListener的子类WindowAdapter已经实现了WindowListener接口
//并覆盖了其中的所有方法,那么就只需要继承WindowAdapter,复写需要的方法即可
class MyWin extends WindowAdapter
{
	public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}
}

鼠标、键盘事件(一般可以在按钮上进行添加)

import java.awt.*;
import java.awt.event.*;
class MouseKeyDemo 
{
	private Frame f ;//窗体
	private Button but;
	private TextField tf;//文本框
	MouseKeyDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("我的窗体界面");
		f.setBounds(400,200,500,300);
		f.setLayout(new FlowLayout());

		but = new Button("按钮");
		tf = new TextField(20);
		f.add(but);
		f.add(tf);
		myEvent();
		f.setVisible(true);
	}
	private void myEvent()
	{
		//添加but 的鼠标监听
		but.addMouseListener(new MouseAdapter()
		{
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("鼠标进入范围");
			}
		}); 
		but.addMouseListener(new MouseAdapter()
		{
			public void mousePressed(MouseEvent e)
			{
				if(e.getClickCount()==2)//鼠标双击按钮时退出
					System.exit(0);
			}
		});

		//添加but 的键盘监听
		but.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				//if(e.getKeyChar()==e.VK_ENTER)//判断输入的字符是否为 enter
				if(e.isControlDown()&&(e.getKeyChar()==e.VK_ENTER))//判断ctrl和enter键是否同时输入——组合键
					System.out.println("键盘打印");
			}
		});

		//添加tf 的键盘监听键
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				int code = e.getKeyCode();
				if(!(code>=e.VK_0&&code<=e.VK_9))
				{
					e.consume();
					System.out.println(code+"..不是数字,非法");
				}	
			}
		});
	}
	public static void main(String[] args) 
	{
		new MouseKeyDemo();
	}
}

练习:myWindow

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindow
{
	private Frame f;
	private Button b;
	private TextField tf;
	private TextArea ta;
	private Dialog d;
	private Label l;
	private Button OkBut;
	MyWindow()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my frame");
		b = new Button("转到");
		tf = new TextField(60);
		ta = new TextArea(30,70);
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		f.add(tf);
		f.add(b);
		f.add(ta);

		d = new Dialog(f,"错误信息",true);//当为true时,dialog对话框弹出后窗体 f将不能操作
		l = new Label();
		OkBut = new Button("确定");
		d.setBounds(450,220,280,100);
		d.setLayout(new FlowLayout());
		d.add(l);
		d.add(OkBut);


		myEvent();
		f.setVisible(true);
	}
	private void myEvent()
	{
		tf.addKeyListener(new KeyAdapter()//对tf添加键盘的事件监听
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==e.VK_ENTER)
					openFile();	
			}
		});
		b.addActionListener(new ActionListener()//对转到按钮添加事件监听
		{
			public void actionPerformed(ActionEvent e)
			{
				openFile();	
			}
		});
		f.addWindowListener(new WindowAdapter()//添加窗体关闭的事件监听
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		d.addWindowListener(new WindowAdapter()//添加dialog窗体的事件监听
		{
			public void windowClosing(WindowEvent e)
			{
				d.setVisible(false);//关闭dialog弹出框
			}
		});
		OkBut.addActionListener(new ActionListener()//添加dialog按钮组件的事件监听
		{
			public void actionPerformed(ActionEvent e)
			{
				d.setVisible(false);
			}
		});
	}
	private void openFile()
	{
		ta.setText("");
		File dir = new File(tf.getText());//将获取的文本输入框数据封装为文件对象
		if(dir.exists()&&dir.isDirectory())//判断是否存在,是否是目录
		{
			String[] files = dir.list();//获取该目录下所有文件和目录
			for(String file : files)
			{
				ta.append(file+"\r\n");//将文本输入框的数据追加到文本区域
			}
					
		}
		else//如果dir不存在或者不是目录,给出提示信息
		{
			l.setText("输入"+dir+"地址错误,请更改");//设置文本提示信息
			d.setVisible(true);//弹出dialog错误对话框
		}
	}
}
class Demo2 
{
	public static void main(String[] args) 
	{
		new MyWindow();
	}
}
 

菜单:Menu 对象是从菜单栏部署的下拉式菜单组件。

菜单可以是任意分离式 菜单。可以打开分离式菜单,并从其父菜单栏或菜单中拖开。释放鼠标按钮之后,它仍然在屏幕上。分离菜单的机制与平台有关,因为分离式菜单的外观由其同位体确定。对于不支持分离式菜单的平台,分离属性会被忽略。

菜单中的每一项都必须属于 MenuItem 类。它可以是 MenuItem 的一个实例、子菜单( Menu 的一个实例)、或复选框( CheckboxMenuItem 的一个实例)。

import java.awt.*;
import java.awt.event.*;
class MyMenu 
{
	private Frame f ;
	private Menu me,mem;
	private MenuBar mb;
	private MenuItem mi,mim;
	MyMenu()
	{
		init();
	}
	public void init()
	{
		f = new Frame("MyMenu");
		f.setBounds(300,100,500,600);
		f.setLayout(new FlowLayout());

		me = new Menu("文件");
		mem = new Menu("子菜单");
		mb = new MenuBar();
		mi = new MenuItem("close");
		mim = new MenuItem("子条目");
		me.add(mi);//菜单里面添加下拉子条目
		me.add(mem);//菜单里面添加子菜单
		mem.add(mim);//子菜单里面添加条目
		mb.add(me);//将主菜单添加进菜单栏 MenuBar
		f.setMenuBar(mb);//为了将该菜单栏与 Frame 对象关联,可以调用该框架的 setMenuBar 方法。
		myEvent();
		f.setVisible(true);
	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		mim.addActionListener(new ActionListener()//点击最里层子条目就关闭程序
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
	}
	public static void main(String[] args) 
	{
		new MyMenu();
	}
}
练习:做一个简单的记事本
/*
简单的记事本界面  打开、保存、退出
*/
package mypack;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
 class menuDemo
{
	private Frame f;
	private TextArea ta;
	private MenuBar mb;
	private MenuItem mi1,mi2,mi3,mi4;
	private Menu m1,m2;
	private FileDialog fd;
	private File fi;
	menuDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my frame");
		f.setBounds(300,150,650,500);
		fd = new FileDialog(f,"文件对话框",FileDialog.LOAD);
		ta = new TextArea();
		mb = new MenuBar();
		mi1 = new MenuItem("子条目");
		mi2 = new MenuItem("关闭");
		mi3 = new MenuItem("打开");
		mi4 = new MenuItem("保存");
		m1 = new Menu("文件");
		m2 = new Menu("子菜单");
		m2.add(mi1);
		m1.add(m2);
		m1.add(mi3);
		m1.add(mi4);
		m1.add(mi2);
		mb.add(m1);
		f.add(ta);
		f.setMenuBar(mb);
		myEvent();
		f.setVisible(true);

	}
	 private void myEvent()
	{
		mi3.addActionListener(new ActionListener()//打开文件对话框
		{
			public void actionPerformed(ActionEvent e)
			{
				fd.setVisible(true);//弹出系统文件对话框
				String dirPath = fd.getDirectory();//获取文件对话框的目录
				String file = fd.getFile();//获取文件对话框选定的文件
				if(dirPath==null||file==null)//判断目录和是否有选取文件
					return;
				fi = new File(dirPath,file);//将选取的文件路径封装成一个文件对象
				System.out.println(dirPath+"...."+file);
				ta.setText("");//将前一次显示的文本清除
				try
				{
					BufferedReader br = new BufferedReader(new FileReader(fi));
					String line = null;
					while((line=br.readLine())!=null)
					{
						//System.out.println(line);
						ta.append(line+"\r\n");
					}
					br.close();
				}
				catch (IOException ex)
				{
					throw new RuntimeException("打开文件失败");
				}
			}
		});
		mi4.addActionListener(new ActionListener()//保存文件
		{
			public void actionPerformed(ActionEvent e)
			{
				if(fi==null)//判断文件是否存在,存在就不弹出Dialog对话框
				{
					fd.setVisible(true);
					String dirPath =fd.getDirectory();
					String file = fd.getFile();
					fi = new File(dirPath,file);
				}
				try
				{
					BufferedWriter bw = new BufferedWriter(new FileWriter(fi));
					bw.write(ta.getText());//将更改后的文本区数据进行保存
					bw.flush();
					bw.close();
				}
				catch (IOException ex)
				{
					throw new RuntimeException("保存文件失败");
				}
			}
		});
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
}
public class Demo3 
{
	public static void main(String[] args) 
	{
		new menuDemo();
	}
}

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值