您的位置:首页 > 产品设计 > UI/UE

黑马程序员——GUI图形用户界面

2013-05-31 22:25 405 查看
------- android培训java培训、期待与您交流! ----------

 

GUI(Graphical User Interface)由组件和容器组成,容器也是一种组件

Frame类

这个类用于创建窗口

Frame frame = new Frame();

常用的方法

setVisible()               
设置可见

setSize(int width, int hight)              设置窗口大小

setLocation(int x, int y)            设置窗口在桌面显示的位置

add(button)              
添加一个按钮, 也可以添加其它组件

 

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

 

代码应用-模拟Window记事本

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();
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: