黑马程序员-javaGUI编程总结
2014-07-01 14:57
295 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、GUI概述
1、GUI与CLI
GUI:Graphical User Interface(图形用户界面)
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI:Command line User Interface(命令行用户界面)
就是常见的DOS命令行操作,需要记忆一些常用的命令,操作不直观。
2、AWT与Swing
java为GUI提供的对象都存在java.awt和javax.swing两个包中。
java.awt:Abstract Window Toolkit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。
javax.swing:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现,增强了移植性,属于轻量级控件。
延伸阅读:Java GUI:图形用户界面三剑客相比拼
3、组件关系图
二、GUI布局
布局管理器:
容器中的组件的排放方式,就是布局。
常见的布局管理器:
1、FlowLayout(流式布局管理器):从左到右的顺序排列,Panel默认的布局管理器。
2、BorderLayout(边界布局管理器):界面分为东、南、西、北、中,Frame默认的布局管理器。
3、GridLayout(网格布局管理器):规则的矩阵。
4、CardLayout(卡片布局管理器):选项卡。
5、GridBagLayout(网格包布局管理器):非规则的矩阵。
延伸阅读:java GUI设计和布局
我们先通过一个创建窗体的小例子,来简单了解下GUI编程
三、GUI-Frame
例1:创建图形化界面
对上例中创建的窗体,点击关闭按钮以及自定义按钮等均无反应。这是因为我们尚未对这些按钮编写相应的处理事件代码。对此,我们要介绍事件监听机制。
四、事件监听机制
事件监听机制的组成部分:
1)事件源;2)事件;3)监听器;4)事件处理。
事件源:就是awt或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将事件所对应的处理方法封装到监听器中;
事件监听机制的运作流程:
下面将分别介绍窗体、鼠标及键盘的事件与相应的监听器
1、窗体事件:
我们想让窗体具备关闭功能
2、按钮-Action事件
我们想让按钮具备退出程序的功能。
3、鼠标事件
给按钮添加一个鼠标监听。
4、键盘事件
给按钮添加一个键盘监听。
5、对话框dialog
我们希望当地址输入错误时,会跳出对话框提醒用户操作错误。
例2:列出指定目录
6、菜单
例4:给窗体增加菜单项,并添加打开和存储两个选项
延伸阅读:
1、Java事件处理机制 - 事件监听器的四种实现方式;
2、自定义事件监听:java事件机制;
3、Java事件机制理解及应用;
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、GUI概述
1、GUI与CLI
GUI:Graphical User Interface(图形用户界面)
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI:Command line User Interface(命令行用户界面)
就是常见的DOS命令行操作,需要记忆一些常用的命令,操作不直观。
2、AWT与Swing
java为GUI提供的对象都存在java.awt和javax.swing两个包中。
java.awt:Abstract Window Toolkit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。
javax.swing:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现,增强了移植性,属于轻量级控件。
延伸阅读:Java GUI:图形用户界面三剑客相比拼
3、组件关系图
二、GUI布局
布局管理器:
容器中的组件的排放方式,就是布局。
常见的布局管理器:
1、FlowLayout(流式布局管理器):从左到右的顺序排列,Panel默认的布局管理器。
2、BorderLayout(边界布局管理器):界面分为东、南、西、北、中,Frame默认的布局管理器。
3、GridLayout(网格布局管理器):规则的矩阵。
4、CardLayout(卡片布局管理器):选项卡。
5、GridBagLayout(网格包布局管理器):非规则的矩阵。
延伸阅读:java GUI设计和布局
我们先通过一个创建窗体的小例子,来简单了解下GUI编程
三、GUI-Frame
例1:创建图形化界面
/* *例1:创建图形化界面 *1、创建Frame窗体; *2、对窗体进行基本设置,比如大小、位置、布局等; *3、定义组件,如button等; *4、将组件通过窗体的add方法添加到窗体中; *5、通过setVisible(true)让窗体显示。 */ import java.awt.*; class AwtDemo { public static void main(String[] args) { Frame f=new Frame("my frame"); //f.setSize(500,400); //设置大小 //f.setLocation(300,200); //设置位置 f.setBounds(500,400,300,200); //设置大小与位置 f.setLayout(new FlowLayout());//设置布局方式 Button b=new Button("my button");//定义按钮组件 f.add(b); //将按钮组件添加到窗体中 f.setVisible(true);//让窗体显示 } }
对上例中创建的窗体,点击关闭按钮以及自定义按钮等均无反应。这是因为我们尚未对这些按钮编写相应的处理事件代码。对此,我们要介绍事件监听机制。
四、事件监听机制
事件监听机制的组成部分:
1)事件源;2)事件;3)监听器;4)事件处理。
事件源:就是awt或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将事件所对应的处理方法封装到监听器中;
事件监听机制的运作流程:
下面将分别介绍窗体、鼠标及键盘的事件与相应的监听器
1、窗体事件:
我们想让窗体具备关闭功能
//因为WindowListener的子类WindowAdapter已经实现了WindowListener //接口,并覆盖了其中的所有方法。因此,我们只需要继承WindowAdapter, //并覆盖我们所需要的方法即可。 f.addWindowListener(new WindowAdapter() //以匿名内部类的形式实现事件监听器 { public void windowClosing(WindowEvent e) { System.out.println("关闭窗体"); System.exit(0); } });此时,例1中的窗体就可以关闭了。
2、按钮-Action事件
我们想让按钮具备退出程序的功能。
//按钮支持一个特有监听addActionListener()。 b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("通过按钮退出程序!"); System.exit(); } });
3、鼠标事件
给按钮添加一个鼠标监听。
//鼠标事件 b.addMouseListener(new MouseAdapter() { private int count=1; private 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++)+"次"); } });
4、键盘事件
给按钮添加一个键盘监听。
//键盘事件 b.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) System.out.println("ctrl+enter is run!"); } });
5、对话框dialog
我们希望当地址输入错误时,会跳出对话框提醒用户操作错误。
例2:列出指定目录
/* *例2:列出指定目录 *在tf中输入目录,在按下转到按钮(或回车键)后, *ta中列出目录中所包含的文件及文件夹。当目录错误时,弹出对话框。 */ import java.awt.*; import java.awt.event.*; import java.io.File; class AwtDemo { public static void main(String[] args) { Frame f=new Frame("主窗体"); f.setBounds(500,400,300,200); f.setLayout(new FlowLayout()); Button b=new Button("转到按钮"); final TextField tf=new TextField(60); final TextArea ta=new TextArea(25,70); final Dialog d=new Dialog(f,"提示信息",true);//对话框 final Label lab=new Label(); Button okButton=new Button("确定"); d.setBounds(500,200,300,150); d.setLayout(new FlowLayout()); f.add(b); f.add(tf); f.add(ta); d.add(lab); d.add(okButton); //窗体关闭 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //按下转到按钮显示目录 b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String dirPath=tf.getText(); File dir=new File(dirPath); if (dir.exists()&&dir.isDirectory()) { ta.setText(""); String[] names=dir.list(); for (String name:names ) { ta.append(name+"\r\n"); } } else //地址输入错误时,弹出对话框 { String info="您输入的地址:"+dirPath+"是错误的,请重新输入!"; lab.setText(info); d.setVisible(true); } } }); //按下回车键也显示目录 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER) { String dirPath=tf.getText(); File dir=new File(dirPath); if (dir.exists()&&dir.isDirectory()) { ta.setText(""); String[] names=dir.list(); for (String name:names ) { ta.append(name+"\r\n"); } } else { String info="您输入的地址:"+dirPath+"是错误的,请重新输入!"; lab.setText(info); d.setVisible(true); } } } }); //按下okButton用于退出对话框 okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); //对话框关闭 d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { d.setVisible(false); } }); f.setVisible(true); } }
6、菜单
例4:给窗体增加菜单项,并添加打开和存储两个选项
/* *例4:优化列出指定目录 *给窗体增加菜单项,并添加打开和存储两个选项 */ import java.awt.*; i aecb mport java.awt.event.*; import java.io.*; class AwtDemo { public static void main(String[] args) { MyFrame mf=new MyFrame(); mf.initial(); mf.events(); mf.createFrame(); } } class MyFrame { private Frame f; private Button b,okButton; private TextField tf; private TextArea ta; private Dialog d; private Label lab; private FileDialog openDialog,saveDialog; private File file; private MenuBar mb; //菜单栏 private Menu m; //菜单 private MenuItem closeItem,openItem,saveItem;//菜单项 public void initial() { f=new Frame("主窗体"); b=new Button("转到按钮"); okButton=new Button("确定"); tf=new TextField(60); ta=new TextArea(25,70); d=new Dialog(f,"提示信息",true); lab=new Label(); openDialog=new FileDialog(f,"打开文件",FileDialog.LOAD); saveDialog=new FileDialog(f,"存储文件",FileDialog.SAVE); mb=new MenuBar(); m=new Menu("文件"); closeItem=new MenuItem("退出"); openItem=new MenuItem("打开"); saveItem=new MenuItem("存储"); f.setBounds(500,400,300,200); f.setLayout(new FlowLayout()); d.setBounds(500,200,300,150); d.setLayout(new FlowLayout()); m.add(closeItem); m.add(openItem); m.add(saveItem); mb.add(m); f.setMenuBar(mb); f.add(b); f.add(tf); f.add(ta); d.add(lab); d.add(okButton); } public void events() { //closeItem closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); //openItem openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openDialog.setVisible(true); String dirPath=openDialog.getDirectory(); String fileName=openDialog.getFile(); if(dirPath==null||fileName==null) return; ta.setText(""); 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 (IOException x) { throw new RuntimeException("打开文件失败"); } } }); //saveItem saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(file==null) { saveDialog.setVisible(true); String dirPath=saveDialog.getDirectory(); String fileName=saveDialog.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 x) { throw new RuntimeException("存储文件失败"); } } }); //窗体关闭 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //按下转到按钮显示目录 b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String dirPath=tf.getText(); File dir=new File(dirPath); if (dir.exists()&&dir.isDirectory()) { ta.setText(""); String[] names=dir.list(); for (String name:names ) { ta.append(name+"\r\n"); } } else { String info="您输入的地址:"+dirPath+"是错误的,请重新输入!"; lab.setText(info); d.setVisible(true); } } }); //按下回车键也显示目录 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER) { String dirPath=tf.getText(); File dir=new File(dirPath); if (dir.exists()&&dir.isDirectory()) { ta.setText(""); String[] names=dir.list(); for (String name:names ) { ta.append(name+"\r\n"); } } else { String info="您输入的地址:"+dirPath+"是错误的,请重新输入!"; lab.setText(info); d.setVisible(true); } } } }); //按下okButton用于退出对话框 okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); //对话框关闭 d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { d.setVisible(false); } }); } public void createFrame() { f.setVisible(true); } }
延伸阅读:
1、Java事件处理机制 - 事件监听器的四种实现方式;
2、自定义事件监听:java事件机制;
3、Java事件机制理解及应用;
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
相关文章推荐
- 黑马程序员 java基础24天 GUI编程学习总结
- 黑马程序员——java复习总结——GUI和网络编程
- 黑马程序员--javaGUI图形编程
- 黑马程序员-- Java多线程编程总结
- 黑马程序员_07Java图形化界面GUI知识总结
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员_java网络编程总结
- 黑马程序员_JAVA学习日记_JAVA中图形化界面GUI编程
- 黑马程序员:Java基础总结----网络编程
- 黑马程序员_08Java网络编程知识总结
- 黑马程序员:Java基础总结----GUI图形化界面
- 黑马程序员学习log第七篇基础知识:JAVA的面向对象之GUI总结
- 黑马程序员----JAVA基础之GUI可视化编程与枚举&网络编程
- 黑马程序员-Java基础-GUI编程
- 黑马程序员_JavaGUI总结
- 黑马程序员java基础篇----网络编程总结
- 黑马程序员_java GUI编程
- 黑马程序员:Java基础总结----Java语言编程规范
- 黑马程序员 知识点总结-Java GUI
- 黑马程序员_java GUI编程