------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
GUI(图形用户界面)
· GUI:Graphical User Interface。用图形的方式来显示计算机操作的界面,这样更方便直观
· CLI:Command line User Interface(命令行用户接口)。就是常见dos命令操作,需要记忆一些常用命令,操作不直观
例:比如,创建文件夹,或者删除文件等。使用command命令创建文件等,需要记住很多命令。
· java为GUI提供的对象都在java.Awt和java.Swing两个包中
Awt和Swing:
· java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件
· java.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属于轻量级控件
继承关系图:
Container:为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来。
布局管理器
· 容器中组件的排序方式,就是布局
· 常见的布局管理器:
1. FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器
2. BorderLayout(边界布局管理器):东南西北中,Frame的默认布局管理器
3. GridLayout(网络布局管理器):规则的矩阵
4. CardLayout(卡片式布局管理器):选项卡
5. GridBagLayout(网络包布局管理器):非规则的矩阵
· 建立一个简单的窗体,代码示例:
//Container常用子类:Window Panel(面板不能单独存在)
//Window常用子类:Frame Dialog
//简单窗体创建过程:
Frame f = new Frame("my window");
f.setLayout(new FlowLayout());
f.setSize(400, 500);//设置窗体大小
f.setLocation(500, 400);//设置窗体显示位置
f.setVisible(true);//设置窗体可见
· 创建图形化界面步骤:
1. 创建frame界面
2. 对窗体进行基本设置
3. 定义组件
4. 将组件通过窗体的add方法添加到窗体中
5. 让窗体显示,通过setVisible(true)
事件监听机制:
· 用户对组件的操作,就是一个事件,那么产生事件的组件就是事件源。接收并处理事件,与用户进行交互的行为就是事件处理器。这些处理方式都封装在监听器中。
事件坚挺机制的组成:
· 事件源(组件)
· 事件(Event)
· 监听器(Listener)
· 事件处理器(引发事件后的处理方式)
事件监听机制流程图:
事件监听机制步骤:
1. 确定事件源(容器或组件)
2. 通过事件源对象的addXXXListener()方法将监听器注册到该事件源上
3. 该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象(一般使用匿名内部类)
4. 在覆盖方法时,方法的参数一般是XXXEvent类型的变量接收
5. 事件触发后会把事件打包成对象传递给变量(其中包括事件源对象,通过getSourse()或者getComponent()获取)
· 代码示例:通过按钮关闭窗体
private Frame f;
//通过构造函数初始化
public CloseWindowDemo(){
init();
}
private void init() {
f = new Frame("my window");
//设置属性信息
f.setBounds(400, 500, 500, 600);
f.setVisible(true);
windowEvent();
}
private void windowEvent() {
//添加关闭监听器
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
对话框:
· Dialog类:在创建Dialog类时,需要依赖于一个Frame,形成一个最初不可见的对话框。在参数的最后一位还可以传入true或者flase,如果传入的是true,则在对话框没消失时,所依赖的窗体不可操作
代码示例:
Frame f = new Frame();
Dialog d = new Dialog(f,true);
· FileDialog类:Dialog的子类,构造函数可以传递两种模式。一种是FiaDialog.LOAD:加载;一种是FileDialog.SAVE。保存
菜单继承体系:
· MenuBar:菜单条目,可以通过Frame中的setMenuBar()方法添加菜单条目
· Menu是一个菜单的按钮,MenuBar中的add方法可以添加Menu
· Menu是MenuItem的子类,Menu的add方法可以添加MenuItem
也就是说,Menu是一个有下拉选框的菜单按钮;而MenuItem是菜单的一个实现按钮。
· 先创建MenuBar,在MenuBar中添加Menu或者MenuItem,Menu中可以添加MenuItem
完整代码示例:需求:一个简单的记事本
public class NotePadTest {
public static void main(String[] args) {
new NotePad();
}
}
class NotePad {
private Frame f;//窗体组件
private MenuBar fileMenu;//菜单组件
private Menu fileM;
private MenuItem saveFile,openFile,exit;//菜单项
private TextArea area;
private FileDialog saveFileDialog;
private FileDialog loadFileDialog;
private File file;
public NotePad() {
init();
}
private void init() {
//窗体初始化
f = new Frame("notepad");
//f.setLayout(new FlowLayout());
f.setBounds(500, 100, 500, 600);
f.setVisible(true);
//给窗体添加文本区域
area = new TextArea();
f.add(area);
//菜单初始化,给菜单添加子菜单
fileMenu = new MenuBar();
fileM = new Menu("file");
saveFile = new MenuItem("save");
openFile = new MenuItem("open file");
exit = new MenuItem("exit");
fileMenu.add(fileM);
fileM.add(openFile);
fileM.add(saveFile);
fileM.add(exit);
//窗体添加菜单组件
f.setMenuBar(fileMenu);
windowEvent();
}
private void windowEvent() {
//窗体的保存动作监听
saveFile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//如果是新文件的话,就打开对话框提示
if(file==null) {
//对话框初始化
saveFileDialog = new FileDialog(f, "保存文件", FileDialog.SAVE);
saveFileDialog.setVisible(true);
//从对话框中获取信息并封装成一个文件
String filePath = saveFileDialog.getDirectory();
String fileName = saveFileDialog.getFile();
//当没有选择文件时,则之间结束
if(filePath == null || fileName == null) return;
file = new File(filePath,fileName);
}
//将文本区域的内容写到要保存的文件中
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(file));
String text = area.getText();
bufw.write(text);
} catch (IOException e2) {
throw new RuntimeException("文件保存失败");
} finally {
if(bufw!=null)
try {
bufw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
//窗体的打开动作监听
openFile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//对话框初始化
loadFileDialog = new FileDialog(f,"openfile");
loadFileDialog.setVisible(true);
//从打开文件中获取信息并封装成File
String fileName = loadFileDialog.getFile();
String filePath = loadFileDialog.getDirectory();
//当选择取消时,直接结束动作
if(fileName==null || filePath==null) return;
area.setText("");
file = new File(filePath,fileName);
BufferedReader bufr = null;
//将文件中的信息写到文本区域中
try {
bufr = new BufferedReader(new FileReader(file));
String line = null;
while((line=bufr.readLine())!=null) {
area.append(line+'\n');
}
} catch (IOException e2) {
throw new RuntimeException("文件打开失败");
} finally {
if(bufr!=null)
try {
bufr.close();
} catch (IOException e3) {
e3.printStackTrace();
}
}
}
});
//窗体的关闭动作监听
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
}
jar包双击执行:
1. 通过javac -d命令,可以把一个java文件编译到一个文件夹中。(可以给自己的文件带上包名package)
2. 在javac -d 指定的文件夹下创建一个配置文件信息,名字随意,内容是:
Main-Class:包名.要执行的class文件名
最后要有一个回车,固定格式
3. 通过jar -cvfm jar 包名.jar 配置文件名 包名
4. 生成了可以执行的jar包