该课内容: Java图形界面编程,AWT、布局管理器、事件模型,JFC、Swing编程. 应用JBuilder快速开发图形界面程序.
AWT.
AWT(Abstract Window Toolkit). 抽象窗口工具包. SUN公司提供的用于图形界面编程(GUI)的类库. 基本的AWT库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上(Windows、Unix、Macintosh等)的本地GUI工具进行处理. 例如. 如果我们使用AWT在一个Java窗口中放置一个按钮. 那么实际上使用的是一个具有本地外观和感觉的按钮. 这样. 从理论上来说. 我们所编写的图形界面程序能运行在任何平台上. 做到了图形界面程序的跨平台运行.
布局管理器.
容器里组件的位置和大小是由布局管理器来决定的. 容器对布局管理器的特定实例保持一个引用. 当容器需要定位一个组件时. 它将调用布局管理器来完成. 当决定一个组件的大小时. 也是如此. 在AWT中. 给我们提供了五种布局管理器.
- BorderLayout
- FlowLayout
- GridLayout
- CardLayout
- GridBagLayout
AWT事件模型.
- Events(事件). 描述发生了什么的对象.
- Event source(事件源). 事件的产生器.
- Event handlers(事件处理器). 接收事件对象.解释事件对象并处理用户交互的方法.
EX. 示例1
package test; import java.awt.*; import java.awt.event.*; class Test { public static void main(String[] args) throws Exception{ Frame f = new Frame("frame"); f.setSize(600, 400); // 设置frame的宽度与高度 f.setLocation(100, 100); // 设置frame的显示位置 f.setBackground(Color.blue); // 设置frame的背景颜色 Button btn1 = new Button("button1"); Button btn2 = new Button("button2"); Button btn3 = new Button("button3"); Button btn4 = new Button("button4"); Button btn5 = new Button("button5"); // 使用borderLayout放置控件 f.setLayout(new BorderLayout(10, 10)); // 设置组件间间隙 // 使用FlowLayout放置控件 f.setLayout(new FlowLayout(FlowLayout.LEFT)); // 使用gridLayout放置控件 f.setLayout(new GridLayout(3, 2, 10, 10)); f.add(btn1, "North"); f.add(btn2, "South"); f.add(btn3, "East"); f.add(btn4, "West"); f.add(btn5, "Center"); // 注册监听器 // f.addWindowListener(new MyWindowListener()); // f.addWindowListener(new MyWindowListener1()); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.show(); } }
EX. 示例2
package test; import java.awt.*; import java.awt.event.*; class Test extends Frame{ private Panel borderPannel; private Panel flowPannel; private Panel gridPannel; private Panel cardPannel; public Test(String title){ super(title); // 调用基类方法 setSize(600, 400); setLocation(100, 100); SetBorderLayoutPannel(); SetFlowLayoutPannel(); SetGridLayoutPannel(); SetCardLayoutPannel(); setLayout(new GridLayout(2, 2)); add(borderPannel); add(flowPannel); add(gridPannel); add(cardPannel); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void SetBorderLayoutPannel(){ borderPannel = new Panel(); borderPannel.setLayout(new BorderLayout()); Button btn1 = new Button("north"); Button btn2 = new Button("south"); Button btn3 = new Button("west"); Button btn4 = new Button("east"); Button btn5 = new Button("center"); borderPannel.add(btn1, "North"); borderPannel.add(btn2, "South"); borderPannel.add(btn3, "West"); borderPannel.add(btn4, "East"); borderPannel.add(btn5, "Center"); } public void SetFlowLayoutPannel(){ flowPannel = new Panel(); flowPannel.setLayout(new FlowLayout()); Button btn1 = new Button("button1"); // 增加按键事件的监听器 btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ ((Button)e.getSource()).setLabel("clicked"); } }); Button btn2 = new Button("button2"); flowPannel.add(btn1); flowPannel.add(btn2); } public void SetGridLayoutPannel(){ gridPannel = new Panel(); gridPannel.setLayout(new GridLayout(2, 2)); Button btn1 = new Button("botton1"); Button btn2 = new Button("botton2"); Button btn3 = new Button("botton3"); Button btn4 = new Button("botton4"); gridPannel.add(btn1); gridPannel.add(btn2); gridPannel.add(btn3); gridPannel.add(btn4); } public void SetCardLayoutPannel(){ final CardLayout cl = new CardLayout(); cardPannel = new Panel(); cardPannel.setLayout(cl); Button btn1 = new Button("black"); Button btn2 = new Button("white"); ActionListener al = new ActionListener(){ public void actionPerformed(ActionEvent e){ cl.next(cardPannel); } }; btn1.addActionListener(al); btn2.addActionListener(al); cardPannel.add(btn1, "1"); cardPannel.add(btn2, "2"); } public static void main(String[] args) throws Exception{ Test t = new Test("frame"); t.show(); } }
EX. 示例3
package test; import java.awt.*; import java.awt.event.*; import java.io.*; class Test { public static void main(String[] args){ final Frame f = new Frame("frame"); f.setSize(600, 400); f.setLocation(100, 100); final TextArea ta = new TextArea(); f.add(ta); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); // 创建菜单 MenuBar mb = new MenuBar(); Menu m1 = new Menu("File"); Menu m2 = new Menu("Edit"); MenuItem mi1 = new MenuItem("New"); // 打开并导入数据 MenuItem mi2 = new MenuItem("Open"); mi2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ FileDialog fd = new FileDialog(f, "open", FileDialog.LOAD); fd.show(); String strFile = fd.getDirectory() + fd.getFile(); if (strFile != null){ try{ FileInputStream fis = new FileInputStream(strFile); byte[] buf = new byte[10*1024]; int len = fis.read(buf); fis.close(); ta.append(new String(buf, 0, len)); } catch(Exception ex){ ex.printStackTrace(); } } } }); MenuItem mi3 = new MenuItem("Save"); MenuItem mi4 = new MenuItem("Exit"); mi4.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); MenuItem mi5 = new MenuItem("Copy"); MenuItem mi6 = new MenuItem("Paste"); m1.add(mi1); m1.add(mi2); m1.add(mi3); m1.add(mi4); m2.add(mi5); m2.add(mi6); mb.add(m1); mb.add(m2); f.setMenuBar(mb); f.show(); } }
Java基础类.
JFC(Java Foundation Classes). Java基础类. 是关于GUI组件和服务的完整集合. 主要包含5个API:AWT、Java2D、Accessibility、Drag & Drop、Swing. JFC提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包.
- Java2D是一套图形API. 它为Java应用程序提供了一套高级的有关二维(2D)图形图像处理的类. Java2D API扩展了java.awt和java.awt.image类. 并提供了丰富的绘图风格. 定义了复杂图形的机制和精心调节绘制过程的方法和类. 这些API使得独立于平台的图形应用程序的开发更加简便.
- Accessibility API提供了一套高级工具. 用以辅助开发使用非传统输入和输出的应用程序. 它提供了一个辅助的技术接口. 如. 屏幕阅读器. 屏幕放大器. 听觉文本阅读器(语音处理)等等.
- Drag & Drop技术提供了Java和本地应用程序之间的互操作性. 用来在Java应用程序和不支持Java技术的应用程序之间交换数据.
- JFC模块的重点在Swing. Swing用来进行基于窗口的应用程序开发. 它提供了一套丰富的组件和工作框架. 以指定GUI如何独立于平台地展现其视觉效果.