为什么80%的码农都做不了架构师?>>>
GUI概述(图形用户界面)
Java为GUI提供的对象都在java.Awt与javax.Swing两个包中
Awt:抽象窗口工具包,需要调用本地系统方法实现功能,属于重量级控件
Swing:在Awt基础上建立的一套图形界面系统,提供了更多的组件
完全由Java实现,增强了移植性,属于轻量级控件
继承关系图
/*
Container可以添加组件,而同级的Button等不能
*/
Component
|--Button
|--Label
|--Checkbox
|--TextComponent
|--TextArea
|--TextField
|--Container
|--Window
|--Frame
|--Dialog
|--FileDialog
|--Panel
GUI布局
常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右顺序排列
Panel的默认布局管理器
BorderLayout(边界布局管理器)
东南西北中
Frame的默认布局管理器
GridLayout(网格局部管理器)
规则的矩阵
GardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
Frame
import java.awt.*;
class AwtDemo{
public static void main(String[] args){
// 创建Frame窗体
Frame f=new Frame("my awt");
// 对窗体进行基本设置
f.setSize(500,400);
f.setLocation(300,200);
f.setLayout(new FlowLayout());
// 定义组件
Button b=new Button("我是一个按钮");
// 添加组件
f.add(b);
// 使窗体可视
f.setVisible(true);
}
}
事件监听机制
事件源(组件):awt/swing中的图形界面组件
事件(Event):事件源有对应的特有事件和共性事件
监听器(Listener):将可以触发某一事件的动作封装到监听器
**以上三者都已在Java中封装好,直接获取对象就可以
事件处理(引发事件后处理方式)
窗体事件
import java.awt.*;
import java.awt.event.*;
class AwtDemo{
public static void main(String[] args){
// 创建Frame窗体
Frame f=new Frame("my awt");
// 对窗体进行基本设置
f.setSize(500,400);
f.setLocation(300,200);
f.setLayout(new FlowLayout());
// 定义组件
Button b=new Button("我是一个按钮");
// 添加组件
f.add(b);
// 添加窗体监听器
f.addWindowListener(new MyWin(){
// 窗体关闭
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);
}
}
/*
class MyWin implements WindowListener{
覆盖7个方法,只用到关闭动作,但必须复写
}
因为WindowListener的子类WindowAdapter已经实现了WindowListener接口
并覆盖了其中的所有方法,因此只需要继承自Windowadapter覆盖所需要的方法即可
*/
class MyWin extends WindowAdapter{
public void windowClosing(WindowEvent e){
// System.out.println("window closing");
}
}
Action事件
import java.awt.*;
import java.awt.event.*;
class FrameDemo{
// 定义该图形中所需组件的引用
private Frame f;
private Button but;
FrameDemo(){
init();
}
public void init(){
f=new Frame("my frame");
// 对frame进行基本设置
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
but=new Button("退出");
// 将组建添加到Frame
f.add(but);
// 加载窗体事件
myEvent();
// 显示窗体
f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
// 让按钮具备退出程序的功能
/* 按钮就是事件源
通过关闭窗体示例了解到,想要组件具备特有的监听器
需要查看该组件对象的功能
通过查阅Button的描述,发现按钮支持一个特有监听
*/
but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("exit");
System.exit(0);
}
});
}
public static void main(String[] args){
new FrameDemo();
}
}
鼠标键盘事件
import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent{
private Frame f;
private Button but;
private TextField tf;
MouseAndKeyEvent(){
init();
}
public void init(){
f=new Frame("my frame");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
tf=new TextField(20);
but=new Button("退出");
f.add(but);
f.add(tf);
myEvent();
f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
/* 鼠标监听
but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
System.out.println("活动一次");
}
});
but.addMouseListener(new MouseAdapter(){
private int count=1;
private int clickcount=1;
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入到该组件"+count++);
}
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
System.out.println("双击动作"+clickcount++);
}
}
});
*/
tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(!(e.getKeyCode()>=KeyEvent.VK_0&&e.getKeyCode()<=KeyEvent.VK_9)){
System.out.println(e.getKeyCode()+"......是非法的");
e.consume();
}
}
});
// but键盘监听
but.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
// System.exit(0);
System.out.println("control+enter is run");
}
// System.out.println(KeyEvent.getKeyText(e.getKeyChar())+">......<"+e.getKeyCode());
}
});
}
public static void main(String[] args){
new MouseAndKeyEvent();
}
}
练习-列出指定目录内容
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindowDemo{
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;
MyWindowDemo(){
init();
}
public void init(){
f=new Frame("my window");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
tf=new TextField(30);
but=new Button("转到");
ta=new TextArea(15,40);
f.add(tf);
f.add(but);
f.add(ta);
myEvent();
f.setVisible(true);
}
private void myEvent(){
but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String dirPath=tf.getText();
File dir=new File(dirPath);
if(dir.exists()&&dir.isDirectory()){
ta.setText("");
String[]names=dir.list();
for(String name:names){
ta.append(name+"\r\n");
}
}
// System.out.ptinlny(text);
}
});
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String[] args){
new MyWindowDemo();
}
}