黑马程序员—GUI窗体的基础知识
/*frame窗体
*action事件
*鼠标事件
*键盘事件
*/
import java.awt.*;
import java.awt.event.*;
class FrameDemo
{
//定义图形中所需组件的引用
private Frame f;
private Button but;
private TextField tf;
FrameDemo()
{
init();
}
public void init()
{
f=new Frame("my frame");
//对frame进行基本设置。
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
tf=new TextField(10);
but=new Button("my button");
//将组建添加进frame中。
f.add(tf);
f.add(but);
//加载窗体事件。
myEvent();
//显示窗体。
f.setVisible(true);
}
private void myEvent()
{
//WindowListener用于接收窗口事件的侦听器接口。
//因为该接口中方法较多,而我们现在只用到一个,如果实现他覆盖全部方法很麻烦。
//所以我们找到他的子类,WindowAdapter窗口监听适配器。
//特点:接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。
//我们用匿名内部类的方式实现他,然后复写他的关闭方法。
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,
//而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。
//在发生操作事件时,调用该对象的 actionPerformed 方法。
//addActionListene用于接收操作事件的侦听器接口。
//该接口中只有一个方法,所以没有适配器,
//没有适配器的接口一共有三个。
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("按钮");
System.exit(0);
}
});
//MouseListener用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener。)
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++);
}
});
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//显示每个键对应的码。System.out.println(e.getKeyChar()+":::"+e.getKeyCode());
/*使用enter键关闭窗口。
if(e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);
*/
//使用ctrl+enter键关闭窗口。
if(e.isControlDown() &&e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);
/*
* getKeyText(int keyCode) 返回描述 keyCode 的 String,如 "HOME"、"F1" 或 "A"。
*getKeyChar() 返回与此事件中的键关联的字符。
*getKeyCode() 返回与此事件中的键关联的整数 keyCode。
*/
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+":::"+e.getKeyCode());
}
});
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();
//consume()
// 使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
//
}
}
});
}
}