本文共 5354 字,大约阅读时间需要 17 分钟。
(http://blog.csdn.net/dandanzmc/article/details/24437181)
GUI全称Graphical User Interfaces,意为图形用户户界面,又称为图形用户接口,GUI指的就是采用图形方式显示的计算机操作用户界面,打个比方吧,我们点击QQ图标,就会弹出一个QQ登陆界面的对话框。这个QQ图标就可以被称作图形化的用户界面。
实现GUI编程的必不可少的三个条件是组件、事件
Component对象不能独立显示出来,必须放在某一对象中才可以显示出来。
(http://takeme.iteye.com/blog/1876850)
注意:
事件监听器接口:e.g., ActionListener
事件适配器:e.g. WindowAdaper, KeyAdapter, MouseAdapter……
(http://www.jinxuliang.com/course/PPT/Show/54699909137e420664f62751)实例:(马士兵--GUI)
/*范例名称: * 原文件名称: * 要点: * 1. Java事件处理机制 * 2. 事件源、事件监听器概念及作用 * 3. 如何在一个现有组件上注册监听器 * */import java.awt.*;import java.awt.event.*;public class GUI_MSB2{ public static void main(String[] args){ MyFrame f1=new MyFrame("First event frame");// f1.setVisible(true); }}class MyFrame extends Frame{ MyFrame(String str){ super(str);//设置title setLayout(new BorderLayout()); Button button1=new Button("Press me"); button1.setActionCommand("Game over");//设置触发行为的命令名称 add(button1,BorderLayout.CENTER); Monitor bh=new Monitor(); button1.addActionListener(bh);//添加监听器 setLocation(500, 500); pack();//默认包裹 setVisible(true); }}class Monitor implements ActionListener{ //重写监听器方法 public void actionPerformed(ActionEvent e){//e包含事件源相关信息 System.out.println("A button has been pressed"+ "the relative info is:\n " + e.getActionCommand()); }}结果:
/*范例名称: * 原文件名称: * 要点: * 1、 键盘响应事件(响应上下方向键试试) */import java.awt.*;import java.awt.event.*;public class KeyTest{ public static void main(String[] args){ new MyFrame("KeyMonitor..."); }}class MyFrame extends Frame{ Label num1; MyFrame(String str){ super(str); setLayout(new BorderLayout()); num1=new Label(); add(num1,BorderLayout.CENTER); num1.setText("0"); addKeyListener(new KeyMonitor());//添加键盘监听 pack(); setLocation(500, 500); setVisible(true); } //监听键盘类(内部类) private class KeyMonitor extends KeyAdapter{ public void keyPressed(KeyEvent e){ int keyCode=e.getKeyCode(); int numTemp; switch(keyCode){ case KeyEvent.VK_UP: numTemp=Integer.parseInt(num1.getText()); numTemp++; num1.setText(""+numTemp); System.out.println("向上方向键按下"); break; case KeyEvent.VK_DOWN: numTemp=Integer.parseInt(num1.getText()); numTemp--; num1.setText(""+numTemp); System.out.println("向下方向键按下"); break; default: System.out.println(e.getKeyChar()+"键按下"); break; } } }}结果:
/*范例名称: * 原文件名称: * 要点: * 1. Java实现画笔 * 2、 鼠标响应事件(注意MouseListener接口跟MouseAdapter类的使用; * 3、窗口响应时间 (可以看看 匿名类 的实现,其实就是new了一个父类对象或者接口) */import java.awt.*;import java.awt.event.*;import java.util.*;public class MyMouseAdapter{ public static void main(String[] args){ new MyFrame("Drawing ..."); }}class MyFrame extends Frame{ ArrayList结果:points=null; MyFrame(String s){ super(s); points=new ArrayList (); setLayout(null); setBounds(300,300,400,300); this.setBackground(new Color(204, 204, 255)); setVisible(true); this.addMouseListener(new Monitor()); //添加 窗口关闭监听器 (因为不经常变动且代码量少,可以采用 匿名类的方式) this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ setVisible(false); System.exit(0);//正常退出 } } ); } //重写paint函数 public void paint(Graphics g){ Color c=g.getColor();//保留现场 Iterator i=points.iterator(); while(i.hasNext()){ Point p=(Point)i.next(); g.setColor(Color.blue); g.fillOval(p.x, p.y, 10, 10);//填充椭圆 } g.setColor(c);//恢复现场 } //添加点 public void addPoint(Point p){ points.add(p); }}//鼠标监听器 (MouseAdapter这个需要注意)class Monitor extends MouseAdapter{ public void mousePressed(MouseEvent e){ MyFrame f=(MyFrame)e.getSource(); f.addPoint(new Point(e.getX(), e.getY())); f.repaint();//重绘窗口(原理是调用update();然后调用paint()) }}