黑马程序员_Java基础_GUI图形界面入门
2014-05-21 09:37
585 查看
一,GUI(Graphical User Interface)图形用户接口
Java中为GUI提供的对象都存储在java.Awt和javax.Swing两个包中。
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属于轻量级控件。
Awt继承关系图:
二,常见组件的布局管理器
布局:容器中组件的排列方式,就是布局。
常见的布局管理器:
(1)FlowLayout(流式布局管理器)
从左到右的顺序排列,Panel的默认布局管理器。
(2)BorderLayout(边界布局管理器)
东,南,西,北,中,Frame默认的布局管理器。
(3)GridLayout(卡片布局管理器)
规则的矩形。
(4)CardLayout(卡片布局管理器)
选项卡。
(5)GridBagLayout(网格包布局管理器)
非规则的矩形。
三,图形用户界面的创建步骤
1,创建Frame窗体;
2,对窗体进行基本设置
比如:大小,位置,布局
3,定义组件,
4,通过add方法将组建添加到窗体
5,让窗体显示,setVisible(true)
四,事件监听机制
流程图:
事件监听机制的特点:
1,事件源
2,事件
3,事件监听器
4,事件处理
事件源:Awt或者Swing当中的图形用户界面;
事件:每一个事件源都有自己特有的对应事件或共性事件;
事件监听器:将可以出发某一个事件(不止一个事件)的动作都封装在了监听器中
以上三者在Java中都已经定义好了,直接获取对象就可以了,我们要做到的就是要对产生的动作进行处理。
需求一:创建一个窗体,向窗体中添加一个按钮,点击关闭时,能够关闭窗体。
需求二:在需求一的基础上,实现点击按钮也能关闭窗体。(添加鼠标事件)
需求三:键盘事件监听器的使用;向按钮上添加键盘监听器。
需求四:在按钮上添加鼠标双击事件,每次鼠标双击都产生事件,并记录次数。
需求五:菜单条的创建,实现一个简易的记事本程序。
需求六:定义一个文本框和一个文本域和按钮,文本框获取磁盘路径,在文本域中显示磁盘下的目录。
Java中为GUI提供的对象都存储在java.Awt和javax.Swing两个包中。
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属于轻量级控件。
Awt继承关系图:
二,常见组件的布局管理器
布局:容器中组件的排列方式,就是布局。
常见的布局管理器:
(1)FlowLayout(流式布局管理器)
从左到右的顺序排列,Panel的默认布局管理器。
(2)BorderLayout(边界布局管理器)
东,南,西,北,中,Frame默认的布局管理器。
(3)GridLayout(卡片布局管理器)
规则的矩形。
(4)CardLayout(卡片布局管理器)
选项卡。
(5)GridBagLayout(网格包布局管理器)
非规则的矩形。
三,图形用户界面的创建步骤
1,创建Frame窗体;
2,对窗体进行基本设置
比如:大小,位置,布局
3,定义组件,
4,通过add方法将组建添加到窗体
5,让窗体显示,setVisible(true)
四,事件监听机制
流程图:
事件监听机制的特点:
1,事件源
2,事件
3,事件监听器
4,事件处理
事件源:Awt或者Swing当中的图形用户界面;
事件:每一个事件源都有自己特有的对应事件或共性事件;
事件监听器:将可以出发某一个事件(不止一个事件)的动作都封装在了监听器中
以上三者在Java中都已经定义好了,直接获取对象就可以了,我们要做到的就是要对产生的动作进行处理。
需求一:创建一个窗体,向窗体中添加一个按钮,点击关闭时,能够关闭窗体。
import java.awt.*; import java.awt.event.*; public class AwtDemo { public static void main(String[] args) { Frame myF = new Frame("窗体");//定义窗体Frame,构造函数的标题是窗体名称 myF.setSize(500,400);//设置窗体大小 myF.setLocation(400,300);//设置窗体的位置 Button b = new Button("按钮");//创建按钮 myF.add(b);//将按钮添加到窗体中 myF.setLayout(new FlowLayout());//设置按钮布局,流式布局 //myF.addWindowListener(new myLis());//想窗体中添加关闭窗体事件 //也可以创建一个匿名内部类; myF.addWindowListener(new WindowAdapter() { //最常用的就是关闭窗体; public void windowClosing(WindowEvent e) { System.out.println("关闭窗口" + e.toString());//事件对象所处的事件状态信息; System.exit(0); } public void windowActivated(WindowEvent e) {//窗体前置 System.out.println("激活。。。"); } public void windowOpened(WindowEvent e) { //窗体创建成功显示出来时执行 System.out.println("窗口开启。。。。"); } }); myF.setVisible(true);//让窗体显示出来; System.out.println("hello world"); } } //Frame的父类Window类中addWindowListener(WindowListener l)向窗体中添加对窗体操作的七个事件,因为其 //是一个接口,这里面有七个抽象方法,我们必须都实现才行,但是都实现的话,有些功能不是我们想要的,所以 //它的子类就提供了我们想要的方法,该类是windowAdapter,他是一个抽象类,但是类中的七个方法来自父类window //接口中的方法,但是都有方法体,方法体是空的,为什么有方法体还定义成抽象方法呢,原因是为了避免用户定义该类 //的对象。 class myLis extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("closeing ..."); System.exit(0); } }
需求二:在需求一的基础上,实现点击按钮也能关闭窗体。(添加鼠标事件)
import java.awt.*; import java.awt.event.*; public class FrameDemo { private Frame f; private Button but; public FrameDemo() { init(); } public void init() { f = new Frame("我的窗体"); //设置组件大小; f.setBounds(400,200,300,200); f.setLayout(new FlowLayout());//设置窗体位置和大小 but = new Button("我的按钮"); f.add(but); //加载窗体上的事件 event(); f.setVisible(true); } //将事件和窗体分开; public void event() { f.addWindowListener (new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("关闭窗口。。。"); System.exit(0); } }); /*给这个窗体添加一个按钮,让按钮具备退出程序的功能; 按钮就是事件源,将事件注册到按钮上,选择哪一个监听器呢? 通过关闭窗体示例了解到,想要知道哪个组件具有什么样的事件监听器,需要查看组件对象的功能。 查阅Button类发现他有一个事件监听器:addActionListener(ActionListener l) */ but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("按钮关闭窗口。。。"); System.exit(0); } }); //在按钮上添加鼠标事件; but.addMouseListener(new MouseAdapter() { int count = 1; public void mouseReleased(MouseEvent e) { System.out.println("鼠标进入" + count++); } }); } public static void main(String[] args) { FrameDemo f = new FrameDemo(); } }
需求三:键盘事件监听器的使用;向按钮上添加键盘监听器。
import java.awt.*; import java.awt.event.*; public class FrameKeyDemo { private Frame f; private Button b; private TextField tf; FrameKeyDemo() { zuiF(); } public void zuiF() { f = new Frame("我的窗体"); f.setBounds(300,200,400,300); f.setLayout(new FlowLayout()); tf = new TextField(20);//创建文本框,传入要设置的大小 b = new Button("我的按钮"); f.add(tf); f.add(b); myEvent(); f.setVisible(true); } public void myEvent() { f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); b.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //if(e.getKeyCode() == KeyEvent.VK_ENTER ) //System.exit(0); //int code = e.getKeyCode(); if(e.getKeyCode()==KeyEvent.VK_ENTER && e.isControlDown()) System.out.println("Ctrl and Enter is run..."); } }); 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();//让非法的字符不在文本框中显示; } } }); } public static void main(String[] args) { FrameKeyDemo f = new FrameKeyDemo(); } }
需求四:在按钮上添加鼠标双击事件,每次鼠标双击都产生事件,并记录次数。
import java.awt.*; import java.awt.event.*; public class FrameDemo2 { private Frame f; private Button but; public FrameDemo2() { init(); } public void init() { f = new Frame("我的窗体"); //设置组件大小; f.setBounds(400,200,300,200); f.setLayout(new FlowLayout());//设置窗体位置和大小 but = new Button("我的按钮"); f.add(but); //加载窗体上的事件 event(); f.setVisible(true); } //将事件和窗体分开; public void event() { f.addWindowListener (new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("关闭窗口。。。"); System.exit(0); } }); //添加按钮组件动作事件,只要在按钮上发生操作就会触发事件,包括键盘或鼠标 but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent em) { System.out.println("action...."); } }); //在按钮上添加鼠标事件; but.addMouseListener(new MouseAdapter() { int count = 1; int countC = 1; //添加鼠标进入事件 public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入" + count++); } //添加鼠标单击事件 public void mouseClicked(MouseEvent e) { //让鼠标双击时才触发事件 if(e.getClickCount() == 2) { System.out.println("鼠标双击" + countC++); } //System.out.println("鼠标单击" + countC++); } }); } public static void main(String[] args) { FrameDemo2 f = new FrameDemo2(); } }
需求五:菜单条的创建,实现一个简易的记事本程序。
import java.awt.*; import java.awt.event.*; import java.io.*; public class MenuDemo { private Frame frame; private Menu fileMenu,helpMenu; private MenuBar menuBar; private MenuItem closeItem,openItem,saveItem; private TextArea textArea; private FileDialog openDia,saveDia; private File fl; public MenuDemo() { Init3(); } public void Init3() { frame = new Frame("菜单选项"); frame.setBounds(200,120,700,520); //frame.setLayout(new FlowLayout());不设置布局,则默认布局是边界布局 menuBar = new MenuBar();//添加菜单条,菜单条中可以添加菜单 fileMenu = new Menu("文件"); helpMenu = new Menu("帮助"); //subMenu = new Menu("子菜单");//在菜单中添加菜单,将会是一个有箭头的选项 closeItem = new MenuItem("退出");//将退出项添加到文件菜单中 openItem = new MenuItem("打开"); saveItem = new MenuItem("保存"); textArea = new TextArea(); frame.add(textArea); openDia = new FileDialog(frame,"打开",FileDialog.LOAD); saveDia = new FileDialog(frame,"保存",FileDialog.SAVE); //将菜单添加到菜单条上 menuBar.add(fileMenu); menuBar.add(helpMenu); //将子菜单,子条目,退出添加到菜单上 fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(closeItem); //将子菜单条目添加到子菜单上 //subMenu.add(tiaoMu); frame.setMenuBar(menuBar); event(); frame.setVisible(true); } public void event() { saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(fl == null) { saveDia.setVisible(true); String dirPath = saveDia.getDirectory(); String fileName = saveDia.getFile(); if(dirPath == null || fileName == null)//如果路径或文件名为空,返回 return ; fl = new File(dirPath,fileName); } try { BufferedWriter fw = new BufferedWriter(new FileWriter(fl)); String str = textArea.getText(); fw.write(str); fw.flush(); fw.close(); } catch (IOException ex) { throw new RuntimeException("存取失败"); } } }); //菜单打开按钮事件 openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ openDia.setVisible(true);//显示系统文件加载窗体 String dirPath = openDia.getDirectory(); String fileName = openDia.getFile(); //System.out.println(dirPath + "---" + fileName); if(dirPath == null || fileName == null)//如果路径或文件名为空,返回 return; textArea.setText(""); fl = new File(dirPath,fileName); try { BufferedReader bufR = new BufferedReader(new FileReader(fl)); String line = null; while ((line=bufR.readLine())!=null) { textArea.append(line + "\r\n"); //System.out.println(line); } bufR.close(); } catch (IOException ex) { throw new RuntimeException("打开失败"); } } }); //点击菜单栏的退出时,退出窗体 closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); //关闭窗口事件 frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MenuDemo(); } }
需求六:定义一个文本框和一个文本域和按钮,文本框获取磁盘路径,在文本域中显示磁盘下的目录。
import java.awt.*; import java.awt.event.*; import java.io.*; public class WindowTest { private Frame f; private Button b; private TextField tf; private TextArea ta; private Dialog d; private Label l; private Button okB; WindowTest() { init(); } public void init() { f = new Frame("My Frame"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); tf = new TextField(60); b = new Button("转到"); ta = new TextArea(20,70); d = new Dialog(f,"错误提示信息",true); d.setBounds(450,240,240,120); d.setLayout(new FlowLayout()); l = new Label(); okB = new Button("确定"); d.add(l); d.add(okB); //流式布局要注意顺序; f.add(tf); f.add(b); f.add(ta); myEve(); f.setVisible(true); } private void myEve() { //当按回车键时,和按转到按钮效果一样 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { showEvent(); } } }); //关闭错误提示窗体 d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { d.setVisible(false); } }); //确定按钮,鼠标点击关闭错误提示框(原理是隐藏该窗体) okB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); //键盘按Enter键关闭错误提示窗 okB.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { d.setVisible(false); } } }); //关闭整个容器并退出 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); tf.addKeyListener(new KeyAdapter() { public void addKeyPressed(KeyEvent e) { } }); //转到按钮显示目录内容 b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showEvent(); } }); } private void showEvent() { String tdir = tf.getText(); //System.out.println(text); //ta.setText(text); //将文本转到文本域之后,让文本框中的文本消失 //tf.setText(""); File f = new File(tdir); if (f.exists() && f.isDirectory()) { ta.setText(""); String[] s = f.list(); for(String name: s) { ta.append(name + "\r\n"); } } else { l.setText("输入的路径:" + tdir + "不存在,请重试"); d.setVisible(true); } } public static void main(String[] args) { new WindowTest(); } }
相关文章推荐
- 黑马程序员——Java基础——GUI图形界面编程
- Java基础---GUI(用户图形界面)(黑马程序员)
- 黑马程序员——基础学习(十四)多线程(Thread)和图形界面编程(GUI)
- 黑马程序员_java基础-图形用户接口GUI(Graphical User Interface)
- 黑马程序员----java基础图形化界面GUI
- 黑马程序员_Java(GUI(图形界面编程))
- 黑马程序员_JAVA 用户图形界面(GUI)
- 黑马程序员:Java基础总结----GUI图形化界面
- 黑马程序员_Java基础_GUI(图形用户接口)
- 黑马程序员—JAVA基础—GUI(图形化界面编程)
- 黑马程序员——Java基础--GUI(图形化界面)
- Java基础班学习笔记(15)GUI图形界面编程
- 黑马程序员:Java基础总结----GUI图形化界面
- Java基础之图形界面GUI
- 黑马程序员 ----java基础 GUI用户登入界面
- 黑马程序员--GUI界面编程--java学习日记9(基础知识)
- 黑马程序员—java基础_GUI图形化界面
- 黑马程序员——Java基础--GUI图形化界面
- 黑马程序员--Java基础学习(GUI图形化界面)第二十二天
- 黑马程序员——学习日记2(java入门基础知识点)