GUI
全称:Graphical User Interface(图形用户接口)两个很重要的包
java.Awt:(Abstract Window ToolKit抽象窗口工具包)
需要调用本地系统方法实现功能.属重量级控件,跨平台性不是很好.
javax.Swing: 在AWT的基础上,建立的一套图形化几面系统.
构成:
Component(构件,组件)
|--Container(容器,特殊的子类)
|--Window(窗口)
|--Frame(框架,窗体)
|--Dialog(对话框)
|--Panel(面板)
//下面与Container同级,但是不能添加组件
|--Button(按钮)
|--Label(标签,作用在于封装文字)
|--Checkbox(复选框)
布局管理器
|-- FlowLayout(流式布局管理器)从左到右的顺序排列
|-- BorderLayout(边界布局管理器)
东,南,西,北,中(默认居中 添加新组件就会覆盖)
|--GridLayout(网格布局管理器) 计算器(规则的矩阵)
|--CardLayout(卡片布局管理器) 选项卡(右键 -->属性)
|--GridBagLayout(网格包布局管理器) 非规则布局
Frame
|--component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。|--container add(Component comp,int index) 可以添加索引
将指定的组件添加到此容器的给定位置上
container能够添加组件 那些组件都是对象,它把对象都添加到窗体当中,代表了 (它内部其实封装了一个集合),它把这些组件对象都添加到集合当中,都带着角标。所以你可以在其任意的位置上添加元素.
|--Frame()构造一个最初不可见的Frame新实例()
通过5步来完成,图形化界面的制作
1.创建frame窗体
2.对窗体进行基本设置
比如大小,位置,布局
3.定义组件
4.将组件通过窗体的add方法添加到窗体中。
5.让窗体显示,通过setVisible(true).
public class AwtDemo{ public static void main(String[] args) { Frame f = new Frame("my awt"); f.setSize(500,100); //设置长宽 500,100 f.setLocation(300,,200);//设置本地位置(top,left) 300,200 f.setVisible(true); //显示窗体 f.setLayout(new FolwLayout()); // 创建流式布局管理器 Button b = new Button("我是一个按钮"); // f.add(b);//用容器的add方法将这个按钮加进来 } }
事件监听机制
事件监听机制的组成:1, 事件源
2, 事件
3, 监听器
4, 事件处理方式
事件监听机制的特点:
事件源:就是awt包或者swing包中的那些图形界面组件
事件:每一个事件源都有自己特有的对应事件和共性事件.
监听器:可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中.
import java.awt.*;
import java.awt.event.*;
class AwtDemo {
public static void main(String[] args)
{
Frame f = new Frame("my awt");
//设置窗体大小
f.setSize(500,400);
//设备位置位置,距左上方
f.setLocation(300,20);
//设置布局管理
f.setLayout(new FlowLayout());
//按钮
Button b = new Button("我是一个按钮");
//将按钮添加到窗体当中
f.add(b);
//注册监听器
f.addWindowListener(new WindowAdapter()
{
//关闭窗口
public void windowClosing(WindowEvent e)
{
System.out.println("关闭窗口");
System.exit(0);
}
//窗体前置
public void windowActivated(WindowEvent e)
{
System.out.println("被触发了..");
}
//窗体打开
public void windowOpened(WindowEvent e)
{
System.out.println("打开窗体");
}
});
//显示窗体
f.setVisible(true);
}
}
//应为WindowListener的子类windowASdapter已经实现了WindowListener接口.
//并覆盖了其中的所有方法.那么我只需要继承自WindowAdapter覆盖我需要的方法即可
class MyWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.out.println("window closing");
System.exit(0);
}
}
//键盘事件
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<= KeyEvent.VK_9))
{
e.consume();//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
System.out.println(code+"您输入的是非法的");
}
}
});
//给but添加一个监听
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//组合按键,ctrl+enter
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);
//如果按键是esc就退出
//if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
// System.exit(0);
//KeyEvent.getKeyText(e.getKeyCode())打印输入内容
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
}
});
//鼠标事件
but.addMouseListener(new MouseAdapter()
{
int count = 1;
int clickcount = 1;
//鼠标进入事件
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入该按钮"+count++);
}
public void mouseClicked(MouseEvent e)
{
//getClickCount()获取鼠标连击次数
if(e.getClickCount()==2)
System.out.println("鼠标双击事件"+clickcount++);
}
});
//TextArea列出指定路径目录和文件名
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
/*
String text = tf.getText();
//System.out.println(text);
ta.setText(text);
tf.setText("");//清空内容
*/
String dirPath = tf.getText();
File dir = new File(dirPath);//封装成对象
if(dir.exists() && dir.isDirectory())//dir存在,并且是目录
{
ta.setText("");//清空上一次查询
String[] names = dir.list();
for(String name : names)
{
//ta.setText(name+"\r\n");
ta.append(name+"\r\n");
}
}
}
});
菜单
|--MenuBar菜单条|--Menu菜单
|--MenuItem菜单项
public class MyMenuDemo {
private Frame f;
private MenuBar mb;// 菜单栏
private Menu m, subMenu;// 菜单
private MenuItem closeItem, subItem;// 子菜单
MyMenuDemo() {
init();
}
public void init() {
f = new Frame();
f.setBounds(100, 100, 500, 600);
f.setLayout(new FlowLayout());
mb = new MenuBar();
m = new Menu("文件");
closeItem = new MenuItem("退出");
subItem = new MenuItem("子条目");
subMenu = new Menu("子菜单");
f.setMenuBar(mb);// 添加菜单
mb.add(m);// 添加"文件"
m.add(subMenu);// 文件下面添加子菜单
subMenu.add(subItem);// 子条目
m.add(closeItem);
f.setVisible(true);
}
public static void main(String[] args) {
new MyMenuDemo();
}
}