【黑马程序员】Java基础10:GUI窗体实例

来源:互联网 发布:mac奶瓶粉底液色号分类 编辑:程序博客网 时间:2024/06/03 15:03
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------


一、GUI概述

Graphical User Interface(图形用户接口):用图形的方式,来显示计算机操作的界面,这样更方便更直观;

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

 

Component 类的继承关系图:

     


常用类介绍:

1component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例Component 类是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类

2Window对象是一个没有边界和菜单栏的顶层窗口,窗口的默认布局是 BorderLayout

3Frame是带有标题和边框的顶层窗口,窗体的默认布局为 BorderLayout

4Dialog是一个带标题和边界的顶层窗口,边界一般用于从用户处获得某种形式的输入;

5FileDialog类显示一个对话框窗口,用户可以从中选择文件;

6Button此类创建一个标签按钮,当按下该按钮时,应用程序能执行某项动作;

7Label对象是一个可在容器中放置文本的组件,一个标签只显示一行只读文本;

8TextComponent类是所有允许编辑文本的组件的超类;

9TextField对象是允许编辑单行文本的文本组件;

10TextArea对象是显示文本的多行区域,可以将它设置为允许编辑或只读。

 

二、事件监听机制

     


事件监听机制的特点:事件源、事件、监听器、处理方式;

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

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

3、监听器:将可以触发某一个事件的动作(不只一个动作)已经封装到了监听器中;同时也封装了事件的处理方式。

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


三、制作窗体的实例

要求:1、能够通过按扭和窗口X关闭窗体;

 2、注入键盘和鼠标事件;

 3、在窗体中创建TextFieldTextArea

 4、在TextField中输入文件目录,点击按扭,在TextArea中输出目录中所有文件;

 5、如果目录不存在,提未错误信息。

package blog.itheima;import java.awt.*;import java.awt.event.*;import java.io.*;class MyWindowGUI {private Frame frame;//定义一个窗体private TextField textField;//定义一个文件编辑行private TextArea textArea;//定义一个文件显示区域//定义三个按扭,跳转、确认、关闭窗体private Button go,ok,close;//定义提示信息的对话框private Dialog dialog;//对话框中要输入的内容标签,一行只读文本private Label label;//初始化本类对象MyWindowGUI(){init();}public void init(){frame = new Frame("我的窗口");/*void setBounds(int x,int y,int w,int h) 移动组件并调整其大小,由x和y指定左上角的新位置,由w和h指定宽高*/frame.setBounds(300,200,500,300);/*FlowLayout:流式布局管理器,从左到右,Panel默认的布局BorderLayout:边界布局,东,南,西,北,中,Frame默认的布局GridLayout:网格布局管理器,规则的矩阵CardLayout:卡片布局管理器,选项卡GridBagLayout:网格包布局管理器,非规则的矩阵*/frame.setLayout(new FlowLayout());//构造具有指定列数的新空文本字段,列是近似平均字符宽度,与平台有关textField = new TextField(40);//构造一个新文本区,该文本区具有指定的行数和列数,初始为空textArea = new TextArea(12,56);//定义Button的名称go = new Button("转到");close = new Button("关闭窗口");/*创建dialog对象,三个参数:dialog的所有者,标题,处理模式ture,不处理不能进行下一步;为false,可以放在一边,继续做其它事情*/dialog = new Dialog(frame,"温馨提示",true);dialog.setBounds(400,300,300,100);dialog.setLayout(new FlowLayout());//定义初始为空的标签,后续输入内容label = new Label();ok = new Button("确定");dialog.add(label);dialog.add(ok);frame.add(textField);frame.add(go);frame.add(close);frame.add(textArea);event();//把窗体设置为可见的frame.setVisible(true);}private void event(){//通过内部类,复写关闭窗口的方法,定义窗口监听,退出程序frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.out.println("窗口关闭");System.exit(0);}});/*close按扭监听,退出程序;ActionListener没有适配合器,方法只有一个,用于接收操作事件的侦听器接口。*/close.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.out.println("按扭关闭");System.exit(0);}});//ok按扭监听,如果触发,把dialog设置为不可见ok.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dialog.setVisible(false);}});//文本行键盘监听,textField.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){if(e.getKeyCode()==KeyEvent.VK_ENTER)//如果输入ENTER键,调用show方法show();//同时按下Control和C,程序退出if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_C)System.exit(0);}});go.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){show();}});//在go按扭上注入鼠标事件go.addMouseListener(new MouseAdapter(){int count = 1;public void mouseClicked(MouseEvent e){//if(e.getClickCount()==2)//System.out.println("鼠标双击"+count++);System.out.println("鼠标点击"+count++);}public void mouseEntered(MouseEvent e){System.out.println("鼠标进入"+count++);}public void mouseExited(MouseEvent e){System.out.println("鼠标离开"+count++);}});}public void show(){//用文本行中得到键盘录入的数据,即目录String dirPath = textField.getText();//将目录封装成对象File dir = new File(dirPath);if(/*dir.exists() && */dir.isDirectory()){//清空文本区域,防止上次的输入残留textArea.setText("");String[] names = dir.list();for(String name : names){textArea.append(name+"\r\n");}} else {label.setText("您输入了错误路径:"+dirPath+",请重新输入");dialog.setVisible(true);}}public static void main(String[] args) {new MyWindowGUI();}}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
2 0
原创粉丝点击