------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
GUI
Graphical User Interface(图形用户接口)。
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
Graphical User Interface(图形用户接口)。
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI
Command line User Interface (命令行用户接口) 就是常见的Dos命令行操作。
Command line User Interface (命令行用户接口) 就是常见的Dos命令行操作。
需要记忆一些常用的命令,操作不直观。
举例:比如:创建文件夹,或者删除文件夹等
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
Awt和Swing
java.Awt: Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻 量级控件。
继承关系图:
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
布局管理器
容器中的组件的排放方式,就是布局。 常见的布局管理器:
1)FlowLayout(流式布局管理器)
从左到右的顺序排列。 Panel默认的布局管理器。
2)BorderLayout(边界布局管理器)
东,南,西,北,中,Frame默认的布局管理器。
3)GridLayout(网格布局管理器)
规则的矩阵
4)CardLayout(卡片布局管理器)
选项卡
5)GridBagLayout(网格包布局管理器)
3)GridLayout(网格布局管理器)
规则的矩阵
4)CardLayout(卡片布局管理器)
选项卡
5)GridBagLayout(网格包布局管理器)
非规则的矩阵
建立一个简单的窗体
Container常用子类: Window Panel(面板,不能单独存在。)
Window常用子类: Frame Dialog
简单的窗体创建过程:
1) Frame f = new Frame(“my window”);
2)f.setLayout(new FlowLayout());
3)f.setSize(500,400);//设置窗体大小
4)f.setLocation(300,200);//设置窗体出现在屏幕的位置
5)f.setVisible(true);
事件监听机制组成: 事件源(组件)、 事件( Event)、监听器( Listener)、事件处理(引发事件后处理方式)
建立一个简单的窗体
Container常用子类: Window Panel(面板,不能单独存在。)
Window常用子类: Frame Dialog
简单的窗体创建过程:
1) Frame f = new Frame(“my window”);
2)f.setLayout(new FlowLayout());
3)f.setSize(500,400);//设置窗体大小
4)f.setLocation(300,200);//设置窗体出现在屏幕的位置
5)f.setVisible(true);
事件监听机制组成: 事件源(组件)、 事件( Event)、监听器( Listener)、事件处理(引发事件后处理方式)
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。
事件监听机制流程图:
事件监听机制
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者, getComponent()获取。)
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者, getComponent()获取。)
例子:
在文本框中输入目录,点击“转到”按钮,将该目录中的文件
与文件夹名称列在下面的文本区域中。
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindowDemo
{
private Frame f;//定义窗体
private TextField tf;//定义文本框
private Button but;//定义按钮
private TextArea ta;//定义涉及到的组件
private Dialog d;
private Label lab;
private Button okBut;
MyWindowDemo()//定义一个构造函数
{
init();
}
public void init()//对外提供方法
{
f = new Frame("my window");
f.setBounds(300,100,600,500);//(距左边的距离。距上面的距离,宽、高)
f.setLayout(new FlowLayout());//设置布局管理,默认边界布局,此时流布局
tf = new TextField(60);//60为列数
but = new Button("转到");
ta = new TextArea(25,70);//文本区域既能指定行,又能指定列(行,列)
d = new Dialog(f,"提示信息-self",true);//构造一个最初不可见的dialog
d.setBounds(400,200,240,150);
d.setLayout(new FlowLayout());
lab = new Label();
okBut = new Button("确定");
d.add(lab);
d.add(okBut);
f.add(tf);
f.add(but);
f.add(ta);
myEvent();
f.setVisible(true);
}
private void myEvent()
{
okBut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);
}
});
d.addWindowListener(new WindowAdapter()//定义一个窗口监听
{
public void windowClosing(WindowEvent e)
{
d.setVisible(false);
}
});
tf.addKeyListener(new KeyAdapter()//定义一个按键监听
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
});
but.addActionListener(new ActionListener()//添加Action监听
{
public void actionPerformed(ActionEvent e)
{
showDir();
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
private void showDir()//定义一个功能函数
{
String dirPath = tf.getText();//获取文本
File dir = new File(dirPath);
if(dir.exists() && dir.isDirectory())
{
ta.setText("");
String[] names = dir.list();
for(String name : names)
{
ta.append(name+"\r\n");
}
}
else
{
String info = "您输入的信息:"+dirPath+"是错误的。请重输";//错误使的提示信息
lab.setText(info);
d.setVisible(true);
}
}
public static void main(String[] args)
{
new MyWindowDemo();
}
}
菜单继承体系:
菜单
MenuBar,Menu,MenuItem
先创建菜单条,再创建菜单,每一个菜单中建立菜单项。也可以菜单添加到菜单中,作为子菜单。
通过setMenuBar()方法,将菜单添加到Frame中。
MenuBar,Menu,MenuItem
先创建菜单条,再创建菜单,每一个菜单中建立菜单项。也可以菜单添加到菜单中,作为子菜单。
通过setMenuBar()方法,将菜单添加到Frame中。
import java.awt.*;
import java.awt.event.*;
class MyMenuDemo
{
private Frame f;
private MenuBar mb;
private Menu m,subMenu;
private MenuItem closeItem,subItem;
MyMenuDemo()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());
mb = new MenuBar();//菜单条
m = new Menu("文件");//菜单,menu后有箭头,可添加子条目
subMenu = new Menu("子菜单");
subItem = new MenuItem("子条目");
closeItem = new MenuItem("退出");
subMenu.add(subItem);
m.add(subMenu);
m.add(closeItem);
mb.add(m);
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
private void myEvent()//添加事件
{
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 MyMenuDemo();
}
}