------- android培训、java培训、期待与您交流! ----------
GUI:
用图形的方式,来显示计算机操作的界面,这样更方便直观
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
它们之间的继承关系图:
分为组件和容器
当我们进行窗体设计的时候,必须使用布局管理器对窗体进行整体的设计。
比较常见的组件排放方式:
1. FlowLayout(流式布局管理器)
从左到右的排序排列
2. BorderLayout(网格布局管理器)
东西南北中
3. GridLayout(网格布局管理器)
规则的矩阵
下边学习一个特殊的容器:Frame(例子)
重要的部分:事件监听机制
1. 事件源(就是awt,swing包中的那些图形界面组件)
2. 事件(Event)(每个事件源都有自己的特有的对应事件和共性事件)
3. 监听器(Listener)(将可以触发某一个事件的动作都已经封装到了监听器中)
4. 事件处理(引发事件后处理方式,在监听器中处理)
import java.awt.*; import java.awt.event.*; public class FrameDemo { public static void main(String[] args) { //创建了一个最初不可见的窗口实例 Frame f = new Frame("my awt"); //设置窗体的大小。 f.setSize(200,400); //设置窗体的初始位置(与左上角的坐标位置) f.setLocation(200, 400); //设置其布局方式为流式布局 f.setLayout(new FlowLayout()); //增加一个按钮控件 Button b = new Button("按钮"); //将按钮增加到窗体上 f.add(b); //这里设置为true,设置这个窗体为可见的。 f.setVisible(true); } }
事件监听机制的流程图(十分重要)
监听器中对动作的处理可能不止一个。多个动作可能由一个监听器去处理。
事件练习1(窗体事件)
对窗体进行关闭:
import java.awt.*; import java.awt.event.*; public class FrameDemo { public static void main(String[] args) { //创建了一个最初不可见的窗口实例 Frame f = new Frame("my awt"); //设置窗体的大小。 f.setSize(200,400); //设置窗体的初始位置(与左上角的坐标位置) f.setLocation(200, 400); //设置其布局方式为流式布局 f.setLayout(new FlowLayout()); //增加一个按钮控件 Button b = new Button("按钮"); //将按钮增加到窗体上 f.add(b); //增加事件监听器 f.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); //这里设置为true,设置这个窗体为可见的。 f.setVisible(true); } }
事件练习2(添加一个按钮,点击按钮退出程序)
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("my frame"); //对frame进行基本设置 f.setBounds(200,100,200,100); f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到frame中 f.add(but); //加载一下窗体上的事件 myEvent(); //显示窗体 f.setVisible(true); } //专门用于处理事件的函数 private void myEvent() { f.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); //给这个窗体添加一个退出按钮,具备退出程序的功能 //按钮就是事件源。 //想要知道哪个组件具备什么样的特有监听器。需要查看该组件对象 //支持哪些监听。只有它自己知道。 but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { new FrameDemo(); } }
共性事件:(鼠标键盘事件,几乎所有的组件都具备)
addMouseListener
addKeyListener
监听鼠标按下的事件
private void myEvent() { but.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { System.out.println("鼠标点击"); } }); }
//监听键盘按下的事件
private void myEvent() { but.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { System.out.println(e.getKeyChar()); } }); }
对话框Dialog的实现
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("my frame"); //对frame进行基本设置 f.setBounds(200,100,200,100); f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到frame中 f.add(but); //加载一下窗体上的事件 myEvent(); //显示窗体 f.setVisible(true); } //专门用于处理事件的函数 private void myEvent() { but.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if(e.getKeyChar()=='a') { Dialog d = new Dialog(f,"提示框",true); //这里的true与false表示如果提示框出现,则能否对其他 //组件进行操作。 d.setBounds(200,200,200,300); d.setLayout(new FlowLayout()); Label l = new Label(); l.setText("警告"); d.add(l); Button b = new Button("确定"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); //当点击确定按钮时候,退出程序。 } }); d.add(b); d.setVisible(true); } } }); } public static void main(String[] args) { new FrameDemo(); } }
菜单的效果(例)
import java.awt.*; import java.awt.event.*; public class FrameDemo { private Frame f; private MenuBar mb; private Menu m; private Menu subMenu; private MenuItem closeItem; private MenuItem subItem; public FrameDemo() { init(); } public void init() { f = new Frame("my window"); f.setBounds(200,100,400,500); f.setLayout(new FlowLayout()); mb = new MenuBar(); m = new Menu("file"); subMenu = new Menu("子菜单"); subItem = new MenuItem("子条目"); closeItem = new MenuItem("退出"); m.add(closeItem); subMenu.add(subItem); m.add(subMenu); mb.add(m); f.setMenuBar(mb); myEvent(); f.setVisible(true); } private void myEvent() { closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { new FrameDemo(); } }
jar包双击执行的操作:
修改jar包下MANIFEST.MF文件,配置其主函数
例如
Manifest-Version:1.0
Main-Class:frame.FrameDemo