------- android培训、java培训、期待与您交流! ----------
GUI(Graphical User Interface)由组件和容器组成,容器也是一种组件
这个类用于创建窗口
Frame frame = new Frame();
常用的方法
setVisible() 设置可见
setSize(int width, int hight) 设置窗口大小
setLocation(int x, int y) 设置窗口在桌面显示的位置
add(button) 添加一个按钮, 也可以添加其它组件
用于穿件一个按钮的组件
语法
Button button = new Button(String buttonName);
用于布局的类有一下几种FlowLayout BorderLayout GridLayout GridBagLayout CardLayout,它们都实现了LayoutManager接口
Frame中提供了setLayout(LayoutManagerlayout)方法来给窗口设置布局
事件就是用户的操作
事件源: 发生事件的组件
监听器: 实现了Listener接口的类,包含若干对事件处理的方法, 要添加监听器必须先定义类实现Listener接口并实现里面的抽象方法
监听器适配器: 这是个实现了Listener接口的抽象类,实现了接口中的方法(空实现),这样就不用在定义监听器时实现所有的方法, 只需要重写需要的处理事件的方法就可以了,比如窗口的适配器是WindowAdapter类
常用的添加添加事件监听器的方法
Frame.addWindowListener(Listener lis) 给窗体添加事件的方法
button.addMouseListener(Listener lis) 给按钮添加鼠标点击事件监听器
textArea.addKeyListener(Listener lis) 给文本域添加键盘事件监听器
动作监听器
ActionListener 可以给事件源添加一个事件监听器,按钮, 鼠标都可以是事件源
MenuBar 菜单栏, MenuItem菜单项, Menu 菜单, Dialog对话框
Frame中setMenuBar方法可以将菜单栏添加到frame
package cn.itcast.gui.exercise;
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 openMenuItem; // 由于多个方法中都要使用, 所以定义为成员变量
private MenuItem saveMenuItem;
private MenuItem exitMenuItem;
private MenuItem gbkMenuItem;
private MenuItem utf8MenuItem;
private TextArea textArea;
private String encoding = "GBK";
private File file;
public Notepad() {
initFrame(); // 初始化窗体
generateMenuBar(); // 构建菜单栏
generateTextArea(); // 构建文本域
addListener(); // 添加监听器
setVisible(true); // 设置可见
}
private void initFrame() {
setTitle("记事本");
setSize(600, 400);
setLocation(600, 100);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void generateMenuBar() {
MenuBar menuBar = new MenuBar(); // 菜单栏
Menu fileMenu = new Menu("文件"); // 菜单
Menu editMenu = new Menu("编辑");
Menu searchMenu = new Menu("查看");
openMenuItem = new MenuItem("打开"); // 菜单项
saveMenuItem = new MenuItem("保存");
exitMenuItem = new MenuItem("退出");
gbkMenuItem = new MenuItem("GBK");
utf8MenuItem = new MenuItem("UTF-8");
fileMenu.add(openMenuItem); // 把菜单项装入菜单
fileMenu.add(saveMenuItem);
fileMenu.add(exitMenuItem);
searchMenu.add(gbkMenuItem);
searchMenu.add(utf8MenuItem);
menuBar.add(fileMenu); // 把菜单添加到菜单栏
menuBar.add(editMenu);
menuBar.add(searchMenu);
setMenuBar(menuBar); // 把菜单栏添加到Frame
}
private void generateTextArea() {
textArea = new TextArea();
textArea.setFont(new Font("Courier New", Font.PLAIN, 15)); // 设置字体
add(textArea); // 添加到窗体
}
private void addListener() {
openMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
open();
}
});
saveMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
save();
}
});
exitMenuItem.addActionListener(new ActionListener() { // 给菜单项添加动作监听器
public void actionPerformed(ActionEvent e) {
System.exit(0); // 被点击的时候退出
}
});
textArea.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_O) // 按下Ctrl,
// 并且按了O
open();
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) // Ctrl
// +
// S
save();
}
});
gbkMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
encoding = "GBK"; // 修改码表
loadFile(file); // 重新读取文件
}
});
utf8MenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
encoding = "UTF-8";
loadFile(file);
}
});
}
private void open() {
FileDialog dialog = new FileDialog(this, "打开", FileDialog.LOAD); // 创建对话框
dialog.setVisible(true); // 显示
String dir = dialog.getDirectory(); // 获取选中的路径
String name = dialog.getFile(); // 获取选中的文件名
if (dir != null && name != null) {
file = new File(dir, name);
loadFile(file);
}
}
private void loadFile(File file) {
try (FileInputStream fis = new FileInputStream(file); // 定义输入流指向文件
ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 定义输出流指向内存
) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1)
// 读取文件数据, 写到内存
baos.write(buffer, 0, len);
String content = new String(baos.toByteArray(), encoding); // 把内存中的数据转为String
textArea.setText(content); // 设置TextArea中的文本为content
} catch (IOException e) {
e.printStackTrace();
}
}
private void save() {
FileDialog dialog = new FileDialog(this, "保存", FileDialog.SAVE);
dialog.setVisible(true);
String dir = dialog.getDirectory();
String name = dialog.getFile();
if (dir != null && name != null) {
File file = new File(dir, name);
try (FileWriter fw = new FileWriter(file)) {
fw.write(textArea.getText()); // 获取TextArea中的文本, 写出到文件
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Notepad();
}
}