例:
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");
//对frame进行基本设置
f.setBounds(300, 100, 600, 500);//移动组件并调整大小
f.setLayout(new FlowLayout());
tf = new TextField(20);//创建文本框对象,并设置列数
but = new Button("my button");
f.add(tf);//添加文本框
//将组件添加到frame中
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();//consume()事件,改变默认方式,由此事件来处理.即非法字符不能输入
}
}
});
//给but添加一个键盘监听
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//isControlDown()判断ctrl是否按下
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)//ctrl+enter
//System.exit(0);
System.out.println("ctrl+enter is run");
/*
if(e.getKeyCode()==KeyEvent.VK_ESCAPE)//Esc对应键盘码是27(KeyEvent.VK_ESCAPE),例:KeyEvent.VK_ENTER
System.exit(0);
*/
//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();
}
}
---------------------------------------------------------------------------------------------------------
代码:
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(30);
but = new Button("转到");
ta = new TextArea(15, 40);//文本区域,可以指定行和列
d = new Dialog(f, "提示信息-self", true);//此处的true为设置对话框和窗口绑定,对话框不处理,窗口无法使用
d.setBounds(400, 200, 240, 120);
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()//tf添加键盘监听
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)//判断是否按下enter
{
showDir();
}
}
});
but.addActionListener(new ActionListener()//主窗体按钮事件
{
public void actionPerformed(ActionEvent e)
{
showDir();
/*
String text = tf.getText();//获取tf文本中的内容
ta.setText(text);//在ta中显示text的内容
//System.out.println(text);
tf.setText("");//tf中的内容清空
*/
}
});
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");//ta中添加name
}
}
else
{
String info = "输入的信息是: "+dirPath+"是错误的,请重新输入";
lab.setText(info);//提示信息的自定义Label
d.setVisible(true);//显示提示信息
}
}
public static void main(String[] args)
{
new MyWindowDemo();
}
}
--------------------------------------------------------------------------------------------------------
个人总结:鼠标键盘事件要注意一个小细节:consume()方法,可以让非法字符不能
输入,getClickCount()可以记录鼠标点击次数,mouseEntered和mouseClicked分别
是鼠标进入和点击事件。keyPressed是键盘按下事件,isControlDown可以判定Ctrl
键是否按下,KeyEvent.VK_XXXX可以和getKeyCode()判定某个键是否按下。提示
对话框有模式,可以和窗体绑定。文本框的内容要注意清空。