GUI编程(五)-----事件监听
事件监听器主要包含:动作事件监听器、鼠标事件监听器和键盘事件监听器三种。
动作监听器
代码如下:
1 public static void main(String[] args) { 2 JFrame frame = new JFrame("窗体"); 3 JButton button = new JButton("点我啊"); 4 frame.add(button); 5 //给按钮添加动作监听器 动作时间监听器对于鼠标点击以及空格键都会起作用的。 6 button.addActionListener(new ActionListener() { 7 8 //当按钮被点击的时候,就会调用actionPerformed的方法。 9 @Override 10 public void actionPerformed(ActionEvent e) { // ActionEvent 当前按钮被点击的时候,jvm就会把对应 的时间传递ActionEvent,并且调用actionPerformed方法。 11 //System.out.println("哎呀,被点了..."); 12 JButton button =(JButton) e.getSource(); //getSource() 获取到事件源 13 if(button.getText().equals("点我啊")){ 14 button.setText("点他吧"); 15 }else{ 16 button.setText("点我啊"); 17 } 18 19 } 20 }); 21 frame.setSize(200, 200); 22 frame.setLocationRelativeTo(null); 23 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 24 frame.setVisible(true); 25 }
鼠标事件监听器
代码如下:
1 public static void main(String[] args) { 2 JFrame frame = new JFrame("鼠标事件监听器"); 3 JButton button = new JButton("按钮"); 4 frame.add(button); 5 //给按钮添加鼠标事件监听器 6 /*button.addMouseListener(new MouseListener() { 7 8 @Override 9 public void mouseReleased(MouseEvent e) { 10 System.out.println("鼠标松开..."); 11 12 } 13 14 @Override 15 public void mousePressed(MouseEvent e) { 16 System.out.println("鼠标按下.."); 17 } 18 19 @Override 20 public void mouseExited(MouseEvent e) { 21 System.out.println("鼠标移出..."); 22 } 23 24 @Override 25 public void mouseEntered(MouseEvent e) { 26 System.out.println("鼠标进入..."); 27 } 28 29 @Override 30 public void mouseClicked(MouseEvent e) { 31 System.out.println("鼠标单击.."); 32 } 33 }); 34 35 添加鼠标监听器的时候我只使用 到单击事件,但是目前要我实现所有的方法?? 36 解决方案: 适配器。适配器是实现了MouseListener方法的所有方法,但是实现的方法全部都是空实现。 37 */ 38 39 button.addMouseListener(new MouseAdapter() { 40 41 @Override 42 public void mouseClicked(MouseEvent e) { 43 // System.out.println("鼠标单击了.."); 44 if(e.getClickCount()==2){ 45 System.out.println("双击了.."); 46 } 47 48 } 49 50 51 }); 52 frame.setSize(200, 200); 53 frame.setLocationRelativeTo(null); 54 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 55 frame.setVisible(true); 56 }
键盘事件监听器
代码如下:
1 public static void main(String[] args) { 2 JFrame frame = new JFrame("键盘事件监听器"); 3 JButton button = new JButton("按钮"); 4 frame.add(button); 5 //给按钮添加键盘事件监听器 6 /*button.addKeyListener(new KeyListener() { 7 8 @Override 9 public void keyTyped(KeyEvent e) { 10 System.out.println("键入某个键"); 11 } 12 13 @Override 14 public void keyReleased(KeyEvent e) { 15 // System.out.println("释放某个键"); 16 } 17 18 @Override 19 public void keyPressed(KeyEvent e) { 20 System.out.println("按下某个键.."); 21 } 22 });*/ 23 button.addKeyListener(new KeyAdapter() { 24 @Override 25 public void keyPressed(KeyEvent e) { 26 // System.out.println("按下的字符:"+e.getKeyChar()); 27 //System.out.println("获取键对应的数值:"+ e.getKeyCode()); 28 int code = e.getKeyCode(); 29 switch (code) { 30 case 38: 31 System.out.println("上"); 32 break; 33 case 40: 34 System.out.println("下"); 35 break; 36 case 37: 37 System.out.println("左"); 38 break; 39 case 39: 40 System.out.println("右"); 41 break; 42 default: 43 break; 44 } 45 } 46 }); 47 frame.setSize(200, 200); 48 frame.setLocationRelativeTo(null); 49 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 50 frame.setVisible(true); 51 }
实战
文件搜索器
代码如下:
1 public class FileSearch { 2 3 JFrame frame = new JFrame("文件搜索器"); 4 5 JPanel panel = new JPanel(); 6 7 JTextField field = new JTextField("请输入目录名...",15); 8 9 JButton button = new JButton("搜索"); 10 11 JTextArea area = new JTextArea(15,15); 12 13 //滚动条 14 // ScrollPane bar = new ScrollPane(); 15 JScrollPane bar = new JScrollPane(area); 16 17 18 public void init(){ 19 //先把area添加 到滚动条上。 20 // bar.add(area); 21 //先把组件添加到panel上 22 panel.add(field); 23 panel.add(button); 24 25 //给输入框添加事件 26 field.addMouseListener(new MouseAdapter() { 27 28 @Override 29 public void mouseClicked(MouseEvent e) { 30 JTextField field = (JTextField) e.getSource(); 31 if(field.getText().equals("请输入目录名...")){ 32 field.setText(""); 33 } 34 } 35 }); 36 37 //给按钮添加事件监听器 38 button.addActionListener(new ActionListener() { 39 40 @Override 41 public void actionPerformed(ActionEvent e) { 42 //获取输入框输入的路径 43 String path = field.getText(); 44 //使用输入的路径构建一个FIle对象 45 File dir = new File(path); 46 //找到目录下的所有子 文件 47 File[] files = dir.listFiles(); 48 for(File file : files){ // 1208Project 资料 49 area.setText(area.getText()+ file.getName()+"\r\n"); 50 } 51 } 52 }); 53 54 55 56 //把面板添加到frame上 57 frame.add(panel,BorderLayout.NORTH); 58 frame.add(bar); 59 frame.setSize(300, 400); 60 frame.setLocationRelativeTo(null); 61 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 62 frame.setVisible(true); 63 } 64 65 public static void main(String[] args) { 66 new FileSearch().init(); 67 68 } 69 }