-------android培训 、java培训、期待与您交流! ----------
GUI(图形用户界面)
GUIJava为GUI提供的对象都存在java.Awt和javax.Swing两个包中
Awt与 Swing
java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
继承关系图
布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
建立一个简单的窗体
Container常用子类:Window Panel(面板,不能单独存在。)
Window常用子类:Frame Dialog
简单的窗体创建过程:
Frame f = new Frame(“my window”);
f.setLayout(new FlowLayout());
f.setSize(500,400);//设置窗体大小
f.setLocation(300,200);//设置窗体出现在屏幕的位置
f.setVisible(true);
示例
import java.awt.*;
import java.awt.event.*;
class MyWinowdemo
{
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()
{
f.addWindowListener(new WindowAdapter()
{
public void WindowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
进一步完善的窗口 带点击事件
import java.awt.*;
import java.awt.event.*;
class MyMenuDemo
{
private Frame f;
private MenuBar mb;
private Menu m,subMenu; //初始化一个子条目一个主菜单
private MenuItem closeItem,subItem;
MyMenuDemo()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());
mb = new MenuBar(); //做个菜单条
m = new Menu("文件"); //初始化一个菜单
subMenu = new Menu("子菜单"); //
subItem = new MenuItem("子条目"); //
closeItem = new MenuItem("退出");
subMenu.add(subItem); //子条目添加子菜单
m.add(subMenu); //加子条目
m.add(closeItem); //菜单添加菜单项
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);
}
});
//窗口点叉退出
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args)
{
new MyMenuDemo();
}
}
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("mt button");
//将组建添加到frame中
f.add(but);
//加载一下窗体上的事件
myEvent();
//显示
f.setVisible(true);
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
//让按钮具备退出程序的功能
/* 按钮就是事件源
那么选择哪个监听器呢
通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
需要查看该组件对象的功能,
查API button的 发先按钮支持一个活动监听
只要方法超过三个的都有适配器
*/
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println(" 点了按钮退出");
System.exit(0);
}
}
);
}
public static void main(String[] args)
{
new FrameDemo();
//System.out.println("Hello World!");
}
}
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
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("mt button");
//将组建添加到frame中
f.add(but);
//加载一下窗体上的事件
myEvent();
//显示
f.setVisible(true);
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
//让按钮具备退出程序的功能
/* 按钮就是事件源
那么选择哪个监听器呢
通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
需要查看该组件对象的功能,
查API button的 发先按钮支持一个活动监听
只要方法超过三个的都有适配器
*/
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println(" 点了按钮退出");
System.exit(0);
}
}
);
}
public static void main(String[] args)
{
new FrameDemo();
//System.out.println("Hello World!");
}
}
MenuBar,Menu,MenuItem
先创建菜单条,再创建菜单,每一个菜单中建立菜单项。
也可以菜单添加到菜单中,作为子菜单。
通过setMenuBar()方法,将菜单添加到Frame中。
菜单示例
package mymenu; // 编译的时候前面加-d
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest
{
private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private MenuItem openItem,saveItem,closeItem;
private FileDialog openDia,saveDia;
private File file;
MyMenuTest()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,650,600);
bar = new MenuBar();
ta = new TextArea(); //设置文件区
fileMenu = new Menu("文件");
openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出");
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
f.setMenuBar(bar);
openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);
f.add(ta);
myEvent();
f.setVisible(true);
}
private void myEvent()
{
saveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(file==null)
{//判断
saveDia.setVisible(true);
String dirPath = saveDia.getDirectory();
String fileName = saveDia.getFile();
if(dirPath==null || fileName==null)
return ;
file = new File(dirPath,fileName);
}
try
{ //写入
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
String text = ta.getText();
bufw.write(text);
bufw.close();
}
catch (IOException ex)
{
throw new RuntimeException();
}
}
});
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dirPath = openDia.getDirectory();//找文件路径
String fileName = openDia.getFile(); //找文件名
// System.out.println(dirPath+"..."+fileName);
if(dirPath==null || fileName==null) //点取消返回空
return ;
ta.setText(""); //选的的是有效文件的时候清空以前内容
file = new File(dirPath,fileName);//名字和目录都有了就给封装成对象
try
{
BufferedReader bufr = new BufferedReader(new FileReader(file));
String line = null;
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}
bufr.close();
}
catch (IOException ex)
{
throw new RuntimeException("读取失败");
}
}
});
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args)
{
new MyMenuTest();
}
}