——- android培训、java培训、期待与您交流! ———-
我热爱我的热爱,并将继续坚持我的热爱,爱是我存在的理由,我会是那匹黑马。
一、GUI(图形用户界面)
GUI –Graphical User Interface(图形用户接口)。
• 用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI – Command line User Interface (命令行用户接口)
• 就是常见的Dos命令行操作。
• 需要记忆一些常用的命令,操作不直观。
举例:
• 比如:创建文件夹,或者删除文件夹等,Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
二、继承关系图
Container:为容器,是一个特殊的组件,该组件中可以通过add 方法添加其他组件进来。
Container常用子类:Window Panel(面板,不能单独存在。)
Window常用子类:Frame Dialog
三、常见布局管理
1)、布局:容器中的组件排列方式
2)、常见的布局管理器:
1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
3)GridLayout:网格式布局管理器,规则的矩阵
4)CardLayout:卡片式布局管理器,即选项卡
5)GridBayLayout:网格包布局管理器,非规则矩阵
3)、如果存在多种布局方式,如何创建窗体界面呢?步骤:
1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel
2)将组件加入Panel,设置面板的布局管理器。
四、简单的创建窗体过程
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);
五、事件监听机制组成
事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)
事件监听机制流程图
这里写图片描述
事件监听机制:
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括
事件源对象。通过getSource()或者,getComponent()获 取。)
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
/*建立一上类似QQ登入的界面*/
package nuddles.j2seDemo;
import java.awt.*;
import java.awt.event.*;
class FrameDemo{
// 创建工具类
private Frame frame;
private Button button;
private TextField tf;
FrameDemo(){
init();
}
public void init(){
// 初始化方法
frame = new Frame("my frame");
button = new Button("my button");
tf = new TextField(20);
frame.setBounds(300,100,600,500);
frame.setLayout(new FlowLayout());
frame.add(tf);
frame.add(button);
myEvent();
// 调用事件监听方法
frame.setVisible(true);
}
private void myEvent(){
// 窗口关闭事件
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
button.addActionListener(new ActionListener(){
//按钮事件
int count = 0;
public void actionPerformed(ActionEvent e){
count++;
System.out.println("button clicked"+count);
if (count>=5) {
System.exit(0);
}
}
});
tf.addKeyListener(new KeyAdapter(){
// 键盘事件
public void keyPressed(KeyEvent ke){
int code = ke.getKeyCode();
System.out.println("haha");
if (code<KeyEvent.VK_0||code>KeyEvent.VK_9) {
ke.consume();
System.out.println("these are not numbers");
}
}
});
button.addMouseListener(new MouseAdapter(){
// 鼠标事件
public void mouseClicked(MouseEvent e){
if (e.getClickCount()==2) {
System.exit(0);
}
}
});
button.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
int code = e.getKeyCode();
if (e.isControlDown()&&code==KeyEvent.VK_ENTER) {
System.exit(0);
}
}
});
}
public static void main(String[] args) {
new FrameDemo();
}
}
六、菜单:Menu
1、菜单继承关系
这里写图片描述
2、说明
1)Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem
2)MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。
3)MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。
4)菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件处理。
5)通过setMenuBar()方法,将菜单添加到Frame中。
/*
练习:
创建菜单项,打开,保存,退出 打开文件显示文本区域中。
*/
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.flush();
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();
}
}