黑马程序员_<<GUI(图形用户界面)--------1>>
1. GUI图形用户界面
1.简述
Graphical Interface(图形化用户接口),用图形的方式,来显示计算机操作的界面,这样方便更直观。
2.CLI:Command Userainterface(命令行用户接口)
就是常见的Dos命令操作
3.Java为GUI提供了对象都存在java.Awt和javax.Swing两个包中
Awt和Swinf区别
Java.Awt:Abstract Window ToolKit(抽象窗口工具包)需要调用本地系统方法实现功能。属重量级控件
Javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组建,而且完全由java实现,增强了移植性,属于轻量级控件。
2.布局
容器中的组件的排放方式,就是布局。
1. Flowlayout流式布局 从左向右的顺序排列 Panel默认的布局默认管理器
2. BorderLayout(边界布局管理器) 东 南 西 北中 Frame默认的布局管理器
3. Gridlayout(网络布局管理器) 规则额矩阵
4. GridBaglayout(网格包布局管理器) 非规则的矩阵
5. Gradlayout(卡片布局管理器) 选项卡
3.创建图形化界面
1.创建Frame窗体
2.对窗体进行基本设置:大小,位置和布局
3.定义要添加的组件
4.将组件添加到窗体中
5.显示窗体
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; public class FrameDemo { public static void main(String[] args) { Frame f = new Frame("MY"); f.setSize(500, 400);// 设置大小 f.setLocation(300, 200);// 设置位置 f.setLayout(new FlowLayout());// 设置布局是流水式布局 Button b = new Button("第一个Button");// 定义一个Button按钮 f.add(b);// 将Button空间添加到窗体上 f.setVisible(true);// 设置窗体可见 } }
4.监听器
事件源:awt或者swing包中的那些图形界面组件
事件:每一个事件源都有自己特有的对应事件和共性事件
监听器;将可以触发某一个事件的动作(不只是一个工作)都已经封装到了监听器中
他们之间的关系:
把监听器安装事件源上,然后外部动作触发事件源,然后产生把其封装成对象传给监听器 ,然后触发其中的事件,做出相应的动作。
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class FrameDemo { public static void main(String[] args) { Frame f = new Frame("MY"); f.setSize(500, 400);// 设置大小 f.setLocation(300, 200);// 设置位置 f.setLayout(new FlowLayout());// 设置布局是流水式布局 Button b = new Button("第一个Button");// 定义一个Button按钮 f.add(b);// 将Button空间添加到窗体上 f.setVisible(true);// 设置窗体可见 /* * 添加监听器,里面的参数是WindowListener,但是其有7个抽象方法,我我只用其中的一个方法, * 那么我们重写其他方法的话,太麻烦,所以我们找到了已经实现好的子类:WindowAdapter,这样我们需要什么方法就重写什么方法 */ f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {// 关闭事件 System.out.println("关闭窗口"); System.exit(0);// 关闭动作 } public void windowActivated(WindowEvent e) {// 窗口激活事件,就是前置窗口 System.out.println("前置窗口"); } }); } }
5.Action事件
现在就是Button按钮的事件,现在我们定义一个类,把窗体和事件分开写,这样也便于操作。
增加Button按钮的监听器的话,那么就在Button类中查找,增加的监听器是addActionListener(ActionListener l),其ActionListener接口中就一个抽象方法,所以不需要使用适配器,之间使用匿名内部类就可以重写其监听的动作。
import java.awt.Button; import java.awt.Color; 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 ActionDemo { private Frame ff;// 声明窗体 private Button bu;// Button按钮 public ActionDemo() { init(); } public void init() {// 初始化方法 ff = new Frame("MY—Frame"); bu = new Button("点击我,关闭"); bu.setBackground(Color.blue);//设置背景颜色 ff.setBounds(200, 300, 300, 200);// 设置位置和大小 ff.setLayout(new FlowLayout());// 设置布局为流水式 ff.add(bu);// 将Button添加到窗体上 Action();// 监听器,事件处理 ff.setVisible(true);// 设置窗体可见 } public void Action() {// 事件方法 /* 设置窗体的监听器 */ ff.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("窗体的关闭事件:关闭"); System.exit(0); } }); /* 设置Button的监听器 */ bu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {// Button的事件 System.out.println("Button的事件:关闭"); System.exit(0); } }); } public static void main(String[] agrs) { new ActionDemo(); } }
6.鼠标和键盘监听器
1.鼠标监听器
importjava.awt.Button; importjava.awt.Color; importjava.awt.FlowLayout; importjava.awt.Frame; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.MouseAdapter; importjava.awt.event.MouseEvent; importjava.awt.event.WindowAdapter; importjava.awt.event.WindowEvent; publicclass MouseDemo { private Frame ff;// 声明窗体 private Button bu;// Button按钮 public MouseDemo() { init(); } public void init() {// 初始化方法 ff = new Frame("MY—Frame"); bu = new Button("点击我,关闭"); bu.setBackground(Color.blue);// 设置背景颜色 ff.setBounds(200, 300, 300, 200);// 设置位置和大小 ff.setLayout(new FlowLayout());// 设置布局为流水式 ff.add(bu);// 将Button添加到窗体上 Action();// 监听器,事件处理 ff.setVisible(true);// 设置窗体可见 } public void Action() {// 事件方法 /* 设置窗体的监听器 */ ff.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.out.println("窗体的关闭事件:关闭"); System.exit(0); } }); /* 设置Button的监听器 */ bu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvente) {// Button的事件 System.out.println("活动事件"); } }); /* 给Button增加了鼠标监听器,因为Button是compontent子类,那么增加的监听器方法在compontent类中 */ bu.addMouseListener(new MouseAdapter() {//鼠标事件 /* 单击,单击事件比活动事件先执行,只要是Button一活动,不管是鼠标还是键盘,都会执行 */ public voidmouseClicked(MouseEvent e) {// 默认的是单击 /* * if (e.getClickCount() == 2) { * System.out.println("双击"); } */ System.out.println("单击执行"); } /* 移动事件 */ public void mouseEntered(MouseEvente) { System.out.println("移动到Button上"); } }); } public static void main(String[] args) { new MouseDemo(); } }
2.键盘监听器
import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class KeyDemo { private Frame ff;// 声明窗体 private Button bu;// Button按钮 public KeyDemo() { init(); } public void init() {// 初始化方法 ff = new Frame("MY—Frame"); bu = new Button("点击我,关闭"); bu.setBackground(Color.blue);// 设置背景颜色 ff.setBounds(200, 300, 300, 200);// 设置位置和大小 ff.setLayout(new FlowLayout());// 设置布局为流水式 ff.add(bu);// 将Button添加到窗体上 Action();// 监听器,事件处理 ff.setVisible(true);// 设置窗体可见 } public void Action() {// 事件方法 /* 设置窗体的监听器 */ ff.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("窗体的关闭事件:关闭"); System.exit(0); } }); /* Button添加键盘监听器 */ bu.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) {// 按下事件 /* 按下ESC键,关闭窗口 */ if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { System.out.println("ESC键,关闭"); System.exit(0); } /* * 组合键,在KeyEvevt的父类:InputEvent中, * 有isControlDown就是Ctrl键是否按下,还有判断其他的键是否按下下面Ctrl+Enter键,就数组“组合键” */ if (e.isControlDown() & e.getKeyCode() == KeyEvent.VK_ENTER) System.out.println("组合键"); } }); } public static void main(String[] args) { new KeyDemo(); } }
对文本框设置键盘监听器:文本框中只能输入数字
思路:
1.在窗体上添加一个文本框
2.对文本框添加键盘监听器
3.判断按下的键,如果符合添加默认输入,如果不符合条件则使用KeyEvent的父类InputEvent中的consume()方法取消默认事件。
public class TextFieldDemo { private Frame ff;// 声明窗体 private TextField text;// 声明文本框 public TextFieldDemo() { init(); } public void init() {// 初始化方法 ff = new Frame("MY—Frame"); text = new TextField(10);// 长度是10列 ff.setBounds(200, 300, 300, 200);// 设置位置和大小 ff.setLayout(new FlowLayout());// 设置布局为流水式 ff.add(text);//添加到框架中 Action();// 监听器,事件处理 ff.setVisible(true);// 设置窗体可见 } public void Action() {// 事件方法 /* 设置窗体的监听器 */ ff.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("窗体的关闭事件:关闭"); System.exit(0); } }); /*为文本框添加键盘监听器*/ text.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){//按下事件 int key=e.getKeyCode(); if(!(key>=KeyEvent.VK_0 && key<=KeyEvent.VK_9)){ e.consume();//不执行默认动作,就是不添加到文本框中 } } }); } public static void main(String[]args) { new TextFieldDemo(); } }
7.列出目录内容-练习
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; 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 DirDemo { private Frame ff; private TextField text; private Button bu; private TextArea area; public DirDemo(){ init(); } /*初始化方法*/ public void init(){ /*窗体设置*/ ff=new Frame("查看目录列表"); ff.setSize(400, 500);//设置大小 ff.setLocation(300, 200);//设置位置 ff.setLayout(new FlowLayout());//设置布局 /*TextField设置*/ text=new TextField(40);//初始化的时候指定列 ff.add(text);//添加到窗体上 /*Button设置*/ bu=new Button("转到"); ff.add(bu);//添加到窗体上 /*TextArea 设置*/ area=new TextArea(20,50); ff.add(area);//添加到窗体上 myEvent(); ff.setVisible(true);//设置显示 } /*监听器和事件*/ public void myEvent(){ /*设置窗体监听器*/ ff.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){//关闭事件 System.out.println("窗体关闭"); System.exit(0); } }); /*设置Button的监听器*/ bu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {//活动事件 String url=text.getText();//或得TextField中的信息 area.setText(""); File dir=new File(url); int count=0; if(dir.isDirectory()){ String [] fileNames=dir.list(); for(String name:fileNames){ count++; area.append((new Integer(count)).toString()+":-"); area.append(name); area.append("\r\n"); } }else{ area.setText("您输入的路径不是一个文件目录"); } text.setText(""); } }); } public static void main(String[] args) { new DirDemo(); } }
结果: