黑马程序员———GUI

来源:互联网 发布:服务器端编程技术 编辑:程序博客网 时间:2024/05/16 02:29

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

GUI

GUI : Graphical User Interface(图形用户接口)

用图形的方式,来显示计算机操作的界面,这样更方编直观。

CLI: Command line User Interfac(命令行用户接口)

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

Java为GUI提供的对象都存在java.awt和javax.swing两个包中。

Awt和Swing

java.awt: Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。

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

继承关系图:

布局管理器

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

常见的布局管理器:

FlowLayout(流式布局管理器):从左到右的顺序排列  Panel默认的布局管理器

BorderLayout(边界布局管理器) 东,南,西,北,中  Frame默认的布局管理器

GridLayout (网格布局管理器) 规则的矩阵

CardLayout(卡片布局管理器) 选项卡

GridBagLayout(网格包布局管理器) 非规则的矩阵

Frame介绍:是带有标题和边框的顶层窗口。

构造方法:Frame(String title) 构造一个新的、最初不可见的、具有指定标题的Frame对象

常用方法:public Component add(Component comp) 将指定组件追加到此容器的尾部。

public void setSize(int width,int height) 调整组件的大小,使其宽度为width,高度为height

public void setLocation(int x , int y) 将组件移到新位置。通过此组件父级坐标空间中的 xy 参数来指定新位置的左

上角。

public void setBounds(int x , int y , int width, int height) 移动组件并调整其大小。由 xy 指定左上角的新位置,由 widthheight 指定新的大小。

public void setVisible(boolean b) 根据参数 b 的值显示或隐藏此组件。

Frame小练习:

package GUI;import java.awt.*;import java.awt.event.*;public class FrameDemo {public static void main(String[] args) {//创建Frame对象Frame f = new Frame("awt demo");//设置Frame大小f.setSize(500,400);//设置Frame位置f.setLocation(300, 200);//为Frame指定布局器f.setLayout(new FlowLayout());//为Frame添加监听f.addWindowListener(new WindowAdapter(){//窗口激活监听public void windowActivated(WindowEvent e){System.out.println("window Activated");}//窗口打开监听public void windowOpened(WindowEvent e){System.out.println("window opened");}//窗口关闭监听public void windowClosing(WindowEvent e){System.exit(0);}});//设置窗口可见f.setVisible(true);}}

事件监听

事件监听的组成:

事件源(组件)

事件(Event)

监听器(Listener)

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

事件监听流程图:

 

事件监听的特点:

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

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

监听器: 将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。

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

理。

练习窗口监听:

package GUI;import java.awt.*;import java.awt.event.*;public class FrameDemo_2 {//把窗口的初始化和事件的监听放到构造函数中FrameDemo_2(){init();myEvent();}private Frame f = null;private Button  b = null;//初始化窗口  按钮public void init(){f = new Frame("my Frame");b = new Button("my Button");f.add(b);f.setBounds(300, 200, 600, 500);f.setLayout(new FlowLayout());f.setVisible(true);}//事件监听public void myEvent(){//为窗口添加事件监听 抽口关闭功能f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//为按钮添加事件监听  按键关闭功能b.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {System.out.println("退出,按钮干的!");System.exit(0);}});}public static void main(String[] args) {new FrameDemo_2();}}


 

键盘和鼠标事件:

package GUI;import java.awt.*;import java.awt.event.*;public class MouseAndKeyDemo {MouseAndKeyDemo(){init();myEvent();}private Frame f = null;private Button  b = null;TextField tf = null;//初始化窗口  按钮public void init(){f = new Frame("my Frame");b = new Button("my Button");tf =new TextField(20);f.add(b);f.add(tf);f.setBounds(300, 200, 600, 500);f.setLayout(new FlowLayout());f.setVisible(true);}//事件监听public void myEvent(){//为窗口添加事件监听f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//**********************************************************    //键盘事件//判断组合键Ctrl和Enterb.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)System.out.println("Ctrl和ENTER 被按下");}});//屏蔽键tf.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){int code = e.getKeyCode();if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){System.out.println(code+"不合法");e.consume();}}});//*********************************************************//鼠标事件b.addMouseListener(new MouseAdapter(){int count = 1;int clickCount = 1;//鼠标进入public void mouseEntered(MouseEvent e){System.out.println("鼠标进入: "+count++);}//鼠标双击public void mouseClicked(MouseEvent e){if(e.getClickCount() == 2){System.out.println("鼠标双击: "+clickCount++);}}});}public static void main(String[] args) {new MouseAndKeyDemo();}}

Dialog:对话框

构造方法:Dialog(Frame owner, String title, boolean modal)  构造一个最初不可见的Dialog,它带有指定的所有者

 Frame、标题和模式。

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

构造方法:FileDialog(Frame parent , String title, int mode)  创建一个具有指定标题的文件对话框窗口,用于加载或

保存文件。

常用方法:String getFile()   获取此文件对话框的选定文件。

String getDirectory()  获取此文件对话框的目录。

列出指定目录的文件:

package GUI;import java.awt.*;import java.awt.event.*;import java.io.*;public class MyWindowDemo {//构造函数MyWindowDemo(){init();}//定义组件private Frame f ;private TextField tf;private Button b ;private TextArea ta;private Dialog d;private Label lab;private Button bok;//初始化组件public void init(){//基本设置f = new Frame("my window");f.setBounds(300, 200, 600, 500);f.setLayout(new FlowLayout());b = new Button("转到");tf = new TextField(60);ta = new TextArea(25,70);//添加组件f.add(tf);f.add(b);f.add(ta);//Dialog基本设置d = new Dialog(f,"提示消息",true);d.setBounds(300, 200, 200, 100);d.setLayout(new FlowLayout());lab = new Label();bok = new Button("确定");//为Dialog添加组件d.add(lab);d.add(bok);//事件myEvent();//窗体显示f.setVisible(true);}//添加事件public void myEvent(){   //为tf文本框添加键盘监听  输入目录完毕后按回车可以实现跳转功能   tf.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){if(e.getKeyCode() == KeyEvent.VK_ENTER){showDir();}}});//为对话框见天窗口监听  对话框关闭功能 d.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){d.setVisible(false);}});//为bok按钮添加动作监听  bok按钮关闭对话框功能bok.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {d.setVisible(false);}});//为f窗口天剑监听  窗体关闭功能f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//为b按钮天剑动作监听  为b按钮添加显示目录功能b.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {showDir(); //显示目录}});}//显示目录private void showDir() {String Dirpath = tf.getText();//获得父目录File Dir = new File(Dirpath);//获得文件名//如果文件存在且是一个目录if(Dir.exists()&& Dir.isDirectory()){String[] names = Dir.list();//获取目录下的文件名ta.setText("");//清空TextAreafor(String name: names){ta.append(name+"\r\n");//TextArea添加目录下的文件名}}else{//如果不是目录 或者目录不存在 显示对话框//输出信息String Info = "您输入的目录"+Dirpath+"是错误的,请重新输入";lab.setText(Info);//设置lab的值//对话框可见d.setVisible(true);}}public static void main(String[] args) {new MyWindowDemo();}}


 


菜单

Menu:菜单,继承MenuItem;有右三角的图标存在,可添加MenuMenuItem

MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。

MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。

菜单的事件处理和组件一样,可以对类型为MenuItemMenu的对象这个事件源添加活动监听ActionListener,并进行相关的事件理。

通过setMenuBar()方法,将菜单添加到Frame中。

小练习:

package GUI;import java.awt.*;import java.awt.event.*;public class MyMenuDemo {//构造函数MyMenuDemo(){init();}//组件private Frame f ;private MenuBar mb ;private Menu m,subMenu;private MenuItem closedItem,subItem;//初始化组件public void init(){f = new Frame("My Menu");f.setBounds(300, 200, 600, 500);mb = new MenuBar();//创建菜单栏m = new Menu("文件");subMenu = new Menu("子菜单");//创建菜单closedItem = new MenuItem("退出");//创建菜单项subItem = new MenuItem("子条目");//把菜单栏添加到窗体f.setMenuBar(mb);//为菜单栏添加组件mb.add(m);m.add(subMenu);m.add(closedItem);subMenu.add(subItem);myEvent();f.setVisible(true);}//添加事件public void myEvent(){//为窗口添加监听事件 菜单具备关闭时间 f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//为退出菜单项添加动作监听 窗体关闭功能closedItem.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {System.exit(0);}});}public static void main(String[] args) {new MyMenuDemo();}}

具有打开和保存功能的简单记事本程序:

package GUI;import java.awt.*;import java.awt.event.*;import java.io.*;public class MenuText {MenuText(){init();}//定义组件private Frame f;private MenuBar mb;private Menu m;private MenuItem openItem,closeItem,saveItem;private FileDialog openDia ,saveDia;private TextArea ta ;private File fi;//初始化组件public void init(){f = new Frame("My Text");//初始化窗体mb = new MenuBar();//初始化菜单栏m = new Menu("文件");//初始化菜单openItem = new MenuItem("打开");//初始化打开菜单saveItem = new MenuItem("保存");//初始化保存菜单closeItem = new MenuItem("关闭");//初始化关闭菜单//把菜单栏添加到窗体中f.setMenuBar(mb);//把菜单添加到菜单栏中mb.add(m);//把菜单项添加到菜单中m.add(openItem);m.add(saveItem);m.add(closeItem);f.setBounds(300, 200, 600, 500);openDia = new FileDialog(f,"我的打开",FileDialog.LOAD);//打开文件对话框saveDia = new FileDialog(f,"我的关闭",FileDialog.SAVE);//保存文件对话框//文本输入区域ta = new TextArea();f.add(ta);myEvent();//事件监听f.setVisible(true);//设置窗体可见}    //添加监听private void myEvent() {//为关闭菜单项添加事件 使该菜单具备关闭窗体功能closeItem.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {System.exit(0);}});//窗口监听 窗体关闭功能f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//打开菜单栏动作监听 打开文件功能openItem.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {openDia.setVisible(true);//设置文件打开窗口可见String Dir = openDia.getDirectory();//获得目录String file = openDia.getFile();//获得文件名if(Dir==null || file ==null){return;}    fi = new File(Dir,file);//新建文件对象 ta.setText("");//将TextArea置空//读取文件try{//带缓冲的输入流BufferedReader br = new BufferedReader(new FileReader(fi));String line = null;while((line = br.readLine()) != null){ta.append(line+"\r\n");//添加到TextArea区域中}br.close();//关闭流}catch(IOException e){throw new RuntimeException("文件读取失败");}}});//保存菜单项添加动作监听 保存文件功能saveItem.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0) {//判断 如果文件不存在 跳出保存对话框 并新建文件if(fi == null){saveDia.setVisible(true);//设置文件保存对话框可见String Dir = saveDia.getDirectory();//获取目录String file = saveDia.getFile();//获取文件名if(Dir ==null || file==null){//如果点击取消 结束方法return;}fi = new File(Dir,file);//创建文件}//往文件中写数据try{//带缓冲的输出流BufferedWriter bw = new BufferedWriter(new FileWriter(fi));//获取TextArea区域的文本数据String data = ta.getText();//写bw.write(data);//关闭流bw.close();}catch(IOException e){throw new RuntimeException("保存失败");}}});}public static void main(String[] args) {new MenuText();}}



 

 

 


 

 

0 0
原创粉丝点击