GUI
Component类
1.概述:该类是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互,典型图形用户界面中的按钮,复选 框和滚动条都是组件示例;
2.该类的直接常用子类:Button、Checkbox、Container、Lable、TextComponent;
3.构造方法:
Component()构造一个新组件;
4.常用方法:
Container
该组件比较特殊,可将其他组件添加到容器的列表中;
add(Component comp);将指定组件追加到容器尾部;
add(Component comp,int index);将指定组件添加到容器的给定位置上;
import java.awt.*;
import java.awt.event.*;
class FrameDemo{
//定义该图形中所需的组件的引用。
private Frame f;
private Button but;
FrameDemo(){
init();
}
public void init(){
f = new Frame("my frame");
//对frame进行基本设置。
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
but = new Button("my button");
//将组件添加到frame中
f.add(but);
//加载一下窗体上事件。
myEvent();
//显示窗体;
f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//让按钮具备退出程序的功能
/*
按钮就是事件源。
那么选择哪个监听器呢?
通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
需要查看该组件对象的功能。
通过查阅button的描述。发现按钮支持一个特有监听addActionListener。
*/
but.addActionListener(new ActionListener(){
private int count = 1;
public void actionPerformed(ActionEvent e){
//System.out.println("退出,按钮干的");
//System.exit(0);
//f.add(new Button("Button-"+(count++)));
//f.setVisible(true);
//f.validate();
//System.out.println(e.getSource());
Button b = (Button)e.getSource();
Frame f1 = (Frame)b.getParent();
f1.add(new Button("button-"+count++));
f1.validate();
}
});
}
public static void main(String[] args){
new FrameDemo();
}
}
事件监听机制
1.事件监听机制组成
1)事件源(组件)
2)事件(Event)
3)监听器(Listener)
4)事件处理(引发事件后处理方式)
2.事件监听机制流程图
4.窗体事件:
1)addWindowListener(WindowListener l);添加窗口监听器;
该方法为Window类中的方法,添加指定的窗口侦听器,以从此窗口接收窗口事件,如果l为null,则不执行任何操作;
2)WindowListener:用于接收窗口事件的侦听器接口;
3)WindowAdepter以实现该接口,但方法为空,此类存在的目的就是方便于创建侦听器对象,(如果要实现 WindowListener接口,则需要定义接口内的所有方法,比较麻烦,故:此类的出现,只需将需要的方法复写即可);
例 :定义一个类继承WindowAdpter并复写关闭方法,则可实现窗口关闭的需要:
class MyWin extends WindowAdapter
{
public void WindowClosing(WindowEvent e)
{
System.exit(0);
}
}
Action事件
addActionListener(ActionListener l);类Button方法;
ActionListener侦听器下的方法;
actionPerformed(ActionEvent e);
鼠标事件
1.addMouseListener(MouseListener l);鼠标侦听器;类Component中的方法;
2.MouseListener侦听器下的方法:(常用)MouseAdapter()
mouseClicked(MouseEvent e);单击并释放;
mouseDragged(~ e);按下并拖动;
mouseEntered(~ e);~进入组件;
mouseExited(~ e);~离开~;
mouseMored(~ e);~移动到组件上,但无按键按下;
mousePressed(~ e);~释放时~;
mouseWheelMored(MouseWheelEvent e);滚轮旋转;
3.MouseEvent事件下的常用方法:
getClickCount();返回鼠标单击次数(例定义双击时发生事件)
键盘事件
1.addKeyListener(KeyListener l);鼠标侦听器,该方法是Component下的方法;
2.KeyListener接口;KeyAdapter,用于接收键盘事件;
3.该类中的方法:
keyPressed(keyEvent e);按下某个键时;
keyReleased(keyEvent e);释放某个键时;
keyTyped(keyEvent e);键入某个键时;
4.keyEvent中的常用方法;
字段摘要,键盘上所有键对应的值:static int~
例:VK_0,VK_1……;
getKeyChar();返回与此事件关联的字符;
getKeyCode();返回与此事件关联的整数keyCode;
getKeyText(int keyCode);放回描述keyCode的String;
例:getKeyText(VK_SPACE);返回SPACE字符串;
import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent {
private Frame f;
private Button but;
private TextField tf;
MouseAndKeyEvent(){
init();
}
public void init(){
f = new Frame("my frame");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
tf = new TextField(20);
but = new Button("my button");
f.add(tf);
f.add(but);
myEvent();
f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
System.out.println(code+".....是非法的");
e.consume();
}
}
});
//给But添加一个键盘监听。
but.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
//System.exit(0);
System.out.println("ctrl+enter is run");
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
}
});
/*
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("action ok");
}
});
*/
/*
but.addMouseListener(new MouseAdapter()
{
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("双击动作"+clickCount++);
}
});
*/
}
public static void main(String[] args) {
new MouseAndKeyEvent();
}
}
Dialog对话框
1.常用构造函数:
Dialog(Fram owner,String title,boolean modal);owner-该对话框所依赖的窗体,一般对话框不单独存在,title-该对话框的 标题,modal-如果值为true,则该对话框不关闭时,它所依赖的窗体无法操作;
2.Dialog对话框使用方式同Frame一样初始化时可设置大小,位置,标题名,以及他所依附的window,可添加按钮以提示信息 (Lable),可设置布局模式;
FileDialog
1.该类是Dialog的一个子类,该类显示一个对话框窗口,用户可以从中选择文件,通过模式的设定其是打开文件或保存文件;
2.构造函数:
FileDialog(Dialog/Frame parent,String title,int mode);parent-所属的对话框或窗体,title-对话框标题,mode-如果值 为SAVE则要写入文件,值为LOAD则要读取文件;
3.常用方法:
getDirectory();获取文件对话框的目录;
getFile();获取文件对话框的选定文件;
setFilenameFilter(FilenameFilter filter);