------- 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