GUI-03

 

例: 

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()判定某个键是否按下。提示

对话框有模式,可以和窗体绑定。文本框的内容要注意清空。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值