GUI
GUI
Graphical User Interface(图形用户接口)。
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
Awt与 Swing
java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件
。

常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
简单的窗体创建过程:
Frame f = new Frame(“my window”);
f.setLayout(new FlowLayout()); //设置布局管理器
f.setSize(500,400); //设置窗体大小
f.setLocation(300,200); //设置窗体出现在屏幕的位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("qq.png"));
Button button = new Button("我是一个按钮");
f.add(button);
f.setVisible(true);
事件监听机制
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
窗口事件关闭窗体
Frame f = new Frame("我的窗体");
//事件源是窗体,把监听器注册到事件源上
//事件对象传递给监听器
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
//退出虚拟机,关闭窗口
System.exit(0);
}
});
窗口中按钮关闭窗体
Button button = new Button("我是按钮");
//事件源是按钮,给按钮注册监听器
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
鼠标监听器(MouseListener)
void mouseClicked(MouseEvent e)
鼠标按键在组件上单击(按下并释放)时调用。
void mouseEntered(MouseEvent e)
鼠标进入到组件上时调用。
void mouseExited(MouseEvent e)
鼠标离开组件时调用。
void mousePressed(MouseEvent e)
鼠标按键在组件上按下时调用。
void mouseReleased(MouseEvent e)
鼠标按钮在组件上释放时调用。
简单的记事本程序
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Notepad extends Frame{
//简单的记事本程序
private static final long serialVersionUID = 1L;
private MenuItem open;
private MenuItem save;
private MenuItem quit;
private TextArea ta;
public Notepad() {
init();
menubar();
textArea();
event();
}
private void init() {
this.setSize(300, 400); //设置窗体大小
this.setLocation(500, 100); //设置窗体的位置
this.setVisible(true); //设置窗体显示
}
private void menubar() {
MenuBar mb = new MenuBar(); //创建菜单栏
Menu file = new Menu("文件"); //创建菜单
open = new MenuItem("打开");
save = new MenuItem("保存");
quit = new MenuItem("退出");
this.setMenuBar(mb); //将菜单栏添加到窗体上
mb.add(file); //将菜单添加到菜单栏上
file.add(open); //将菜单项添加到菜单上
file.add(save);
file.add(quit);
}
private void textArea() {
ta = new TextArea();
ta.setFont(new Font("Courier New", Font.PLAIN, 20)); //设置字体(字体名字,字体样式,字体大小)
this.add(ta); //将文本区域添加到窗体上
}
private void event() {
this.addWindowListener(new WindowAdapter() { //关闭窗体
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
open.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
open();
}
});
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
save();
}
});
quit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
ta.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) { //键盘释放
if(e.getKeyCode() == KeyEvent.VK_O && e.isControlDown())
open();
}
});
ta.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_S && e.isControlDown())
save();
}
});
}
private void open() {
FileDialog fd = new FileDialog(this, "打开", FileDialog.LOAD); //创建对话框对象,并指定模式
fd.setVisible(true); //显示对话框
String dir = fd.getDirectory(); //获取对话框的目录
String file = fd.getFile(); //获取对话框的文件名
if(dir != null && file != null){
loadFile(new File(dir,file)); //读取文件
}
}
private void loadFile(File file) {
try (
FileInputStream fis = new FileInputStream(file); //读文件的读取流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
){
int len;
byte[] arr = new byte[1024];
while((len = fis.read(arr))!= -1) {
baos.write(arr, 0, len);
}
byte[] arr2 = baos.toByteArray();
String message = new String(arr2);
ta.setText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
private void save() {
FileDialog fd = new FileDialog(this, "保存", FileDialog.SAVE);
fd.setVisible(true);
String dir = fd.getDirectory();
String file = fd.getFile();
if(dir != null && file != null) {
saveFile(new File(dir,file));
}
}
private void saveFile(File file) {
try(
FileWriter fw = new FileWriter(file); //将文本的内容写到指定的文件上
){
String message = ta.getText(); //获取文本区域中的内容
fw.write(message); //将文本区域的内容写出去
}catch(IOException e) {
}
}
public static void main(String[] args) {
new Notepad();
}
}

浙公网安备 33010602011771号