±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬Ö÷ÒªÔËÓÃÁËjava³ÌÐòʵÄһЩʼþ£¬ÒÔ¼°ÄÚ²¿Àà |
|
ʼþºÍʼþÔ´
ÔËÐÐjavaͼÐÎÓû§½çÃæ³ÌÐòʱ,³ÌÐòÓëÓû§½øÐн»»¥,ʼþÇý¶¯³ÌÐòµÄÖ´ÐÐ.ʼþ(event)¿ÉÒÔ¶¨ÒåΪ³ÌÐò·¢ÉúÁËijЩÊÂÇéµÄÐźÅ.ÍⲿÓû§¶¯×÷ºÍÄÚ²¿³ÌÐò¶¯×÷¶¼¿ÉÒÔ´¥·¢Ê¼þ,ÍⲿÓû§¶¯×÷µÄÀý×ÓÓÐÒÆ¶¯Êó±ê,µã»÷°´Å¥ºÍÇû÷¼üÅ̵È,¶øÄÚ²¿³ÌÐò¶¯×÷µÄÀý×ÓÓж¨Ê±Æ÷.³ÌÐò¿ÉÒÔÑ¡ÔñÏìӦʼþ»òºöÂÔʼþ.
ÄÜ´´½¨Ò»¸öʼþ²¢´¥·¢¸ÃʼþµÄ×é¼þ³ÆÎªÔ´¶ÔÏó(source object)»òÔ´×é¼þ(source component).ÀýÈç,°´Å¥Êǰ´Å¥µã»÷¶¯×÷ʼþµÄÔ´¶ÔÏó.Ò»¸öʼþÊÇʼþÀàµÄʵÀý.ʼþÀàµÄ¸ùÀàÊÇjava.util.EventObject.

ʼþ¶ÔÏó°üº¬ÓëÊÂÎïÏà¹ØµÄÒ»ÇÐÊôÐÔ.¿ÉÒÔʹÓÃEventObjectÀàÖеÄʵÀý·½·¨getSource()»ñµÃʼþµÄÔ´¶ÔÏó.EventObjectÀàµÄ×ÓÀà´¦ÀíÌØ¶¨ÀàÐ͵Äʼþ,ÀýÈç,¶¯×÷ʼþ,´°¿Úʼþ,×é¼þʼþ,Êó±êʼþÒÔ¼°°´¼üʼþ.
Íⲿ¶¯×÷Óû§,Ô´¶ÔÏóºÍʼþÀàÐÍ

×¢Òâ:Èç¹ûÒ»¸ö×é¼þ¿ÉÒÔ´¥·¢Ä³¸öʼþ,ÄÇôÕâ¸ö×é¼þµÄÈÎÒâ×ÓÀà¶¼¿ÉÒÔ´¥·¢Í¬ÀàÐ͵Äʼþ.ÀýÈç,ÿ¸öGUI×é¼þ¶¼¿ÉÒÔ´¥·¢MouseEvent,KeyEvent,FocusEventºÍComponentEvent£¬ÒòΪComponentÊÇËùÓÐGUI×é¼þµÄ¸¸Àà.
×¢Òâ:ÉÏͼ³ýÁËListSelectionEventºÍChangeEventÖ®ÍâµÄËùÓÐʼþÀà¶¼°üÀ¨ÔÚjava.awt.event°üÖÐ,ListSelectionEventºÍChangeEventÔÚjavax.swing.event°üÖÐ.AWTÊÇΪAWT×é¼þÉè¼ÆµÄ,µ«ÊÇÐí¶àSwing×é¼þ¶¼»á´¥·¢ËüÃÇ.
¼àÌýÆ÷,×¢²áÒÔ¼°´¦Àíʼþ
JavaʹÓÃÒ»ÖÖ»ùÓÚίÍеÄÄ£ÐÍÀ´´¦Àíʼþ:Ô´¶ÔÏó´¥·¢Ò»¸öʼþ,¶Ô´Ëʼþ¸ÐÐËȤµÄ¶ÔÏó»á´¦ÀíËü.½«¶Ô´Ëʼþ¸ÐÐËȤµÄ¶ÔÏó³ÆÎª¼àÌýÆ÷(listener).Ò»¸ö¶ÔÏóÒª³ÉΪԴ¶ÔÏóÉϵÄʼþ¼àÌýÆ÷,ÐèÒª¾ß±¸Á½¸öÌõ¼þ:
 
1.¼àÌýÆ÷¶ÔÏóµÄÀà±ØÐëÊÇÏàÓ¦µÄʼþ¼àÌýÆ÷½Ó¿ÚµÄʵÀý,ÒÔÈ·±£¼àÌýÆ÷Óд¦ÀíÕâ¸öʼþµÄÕýÈ··½·¨.JavaΪÿһÖÖÀàÐ͵Äʼþ¶¼Ìṩ¸ö¼àÌýÆ÷½Ó¿Ú.ͨ³£,ʼþXEventµÄ¼àÌýÆ÷½Ó¿ÚÃüÃûΪXListener,¼àÌýÆ÷MouseMotionListenerÀýÍâ.ÀýÈç,ʼþActionEvent¶ÔÓ¦µÄ¼àÌýÆ÷½Ó¿ÚÊÇActionListener,ActionEventµÄÿ¸ö¼àÌýÆ÷¶¼Òò¸ÃʵÏÖActionListener½Ó¿Ú.ʼþÀàÐÍ,¶ÔÓ¦µÄ¼àÌýÆ÷½Ó¿ÚÒÔ¼°¶¨ÒåÔÚ¼àÌýÆ÷½Ó¿ÚÖеķ½·¨.°üº¬´¦ÀíʼþµÄ¼àÌýÆ÷½Ó¿Ú³ÆÎª´¦ÀíÆ÷(handler)µÄ·½·¨.
2.¼àÌýÆ÷¶ÔÏó±ØÐëÓÉÔ´¶ÔÏó×¢²á.×¢²á·½·¨ÒÀÀµÓëʼþµÄÀàÐÍ.Èç¹ûʼþÀàÐÍÊÇActionEvent,ÄÇô¶ÔÓ¦µÄ×¢²á·½·¨ÊÇaddActionListener.Ò»°ãÀ´Ëµ,XEventµÄ×¢²á·½·¨ÃüÃûΪaddXListener.Ò»¸öÔ´¶ÔÏó¿ÉÒÔ´¥·¢¼¸ÖÖÀàÐ͵Äʼþ.Ò»¸öÔ´¶ÔÏóÕë¶Ôÿ¸öʼþ¶¼Î¬»¤×ÅÒ»¸ö×¢²áµÄ¼àÌýÆ÷Áбí,ͨ¹ýµ÷ÓüàÌýÆ÷¶ÔÏóÉϵĴ¦ÀíÆ÷À´Í¨ÖªËùÓÐ×¢²áµÄ¼àÌýÆ÷ÏìÓ¦Õâ¸öʼþ,
JButton jbtOK
= new JButton("OK");
ActionListener listener1 = new OKListenerClass();
jbtOK.addActionListener(listener1); |
µã»÷¸Ã°´Å¥Ê±,JButton¶ÔÏó´¥·¢Ò»¸öActionEvent£¬È»ºó½«Ëü×÷Ϊ²ÎÊý´«µÝÒÔµ÷ÓüàÌýÆ÷µÄactionPerformed·½·¨À´´¦ÀíÕâ¸öʼþ
ʼþ,ʼþ¼àÌýÆ÷ºÍ¼àÌýÆ÷·½·¨  
ÏÖÔÚÎÒÃÇ¿ÉÒÔ±àдһ¸ö³ÌÐò,ʹÓÃÁ½¸ö°´Å¥¿ØÖÆÒ»¸öÔ²µÄ´óС 
**ControlCircle1.java´úÂë:**
package chapter16;
import javax.swing.*;
import java.awt.*;
public class ControlCircle1 extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
private JButton jbtEnlarge = new JButton("Enlarge");
private JButton jbtShrink = new JButton("Shrink");
private CirclePanel canvas = new CirclePanel();
public ControlCircle1()
{
JPanel panel = new JPanel();//Use the panel
to group buttons
panel.add(jbtEnlarge);
panel.add(jbtShrink);
this.add(canvas,BorderLayout.CENTER);//Add
canvas to center
this.add(panel, BorderLayout.SOUTH);//Add buttons
to the frame
}
public static void main(String[] args)
{
JFrame frame = new ControlCircle1();
frame.setTitle("ControlCircle1");
frame.setLocationRelativeTo(null);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
class CirclePanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID =
1L;
private int radius = 5;//Default circle radius
/*RepaintÖØ» the circle*/
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawOval(getWidth()/2-radius, getHeight()/2-radius,
2*radius, 2*radius);
}
} |
ÔËÐнá¹û,µ«²»ÄÜÀ©´óËõСԲµÄ´óС: 
ÈçºÎʹÓð´Å¥·Å´óºÍËõСÕâ¸öÔ²ÄØ?µ±µã»÷Enlarge°´Å¥Ê±£¬Ï£ÍûÄÜÓÃÒ»¸ö±È½Ï´óµÄ°ë¾¶À´ÖØÐ»æÖÆÕâ¸öÔ²¡£¸ÃÈçºÎÍê³ÉËüÄØ?
1.¶¨ÒåÒ»¸öÃûΪEnlargeListenerµÄ¼àÌýÆ÷Àà,ʵÏÖActionListener.
2.´´½¨Ò»¸ö¼àÌýÆ÷,²¢ÇÒ½«Ëü×¢²áµ½jdtEnlarge.
3.ÔÚCirclePanelÖÐÌí¼ÓÒ»¸öÃûΪenlarge()µÄ·½·¨À´Ôö¼Ó°ë¾¶,È»ºóÖØÐ»æÖÆÃæ°å.
4.ʵÏÖEnlargeListenerÖеÄactionPerformed·½·¨À´µ÷ÓÃcanvas.enlarge().
5.ΪÁËÈÃactionPerformed·½·¨¿ÉÒÔ·ÃÎÊÒýÓñäÁ¿canvas,½«EnlargeListener¶¨ÒåΪControlCircle2ÀàµÄÄÚ²¿Àà.ÄÚ²¿ÀඨÒåÔÚÁíÒ»¸öÀàÖÐ
6.ΪÁ˱ÜÃâ±àÒë´íÎó,CirclePanelÀàÏÖÔÚÒ²¶¨ÒåΪControlCircle2µÄÒ»¸öÄÚ²¿Àà.
package chapter16;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ControlCircle2 extends JFrame
{
private static final long serialVersionUID = 1L;
private JButton jbtEnlarge = new JButton("Enlarge");
private JButton jbtShrink = new JButton("Shrink");
private CirclePanel canvas = new CirclePanel();
public ControlCircle2()
{
JPanel panel = new JPanel();
panel.add(jbtEnlarge);
panel.add(jbtShrink);
this.add(canvas,BorderLayout.CENTER);//Add
canvas to center
this.add(panel, BorderLayout.SOUTH);//Add buttons
to the frame
jbtEnlarge.addActionListener(new EnlargeListener());
}
public static void main(String[] args)
{
JFrame frame = new ControlCircle2();
frame.setTitle("ControlCircle2");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
}
class EnlargeListener implements ActionListener//Inner
class
{
public void actionPerformed(ActionEvent e)
{
canvas.enlarge();
}
}
class CirclePanel extends JPanel//Inner class
{
private static final long serialVersionUID =
1L;
private int radius = 5;//Default circle radius
/*Enlarge the circle*/
public void enlarge()
{
radius++;
repaint();
}
/*Repaint the circle*/
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawOval(getWidth()/2-radius, getHeight()/2-radius,
2*radius, 2*radius);
}
}
} |

ÄÚ²¿Àà
ÄÚ²¿Àà(inner class)»òÕßDZÌ×Àà(nested class)ÊǶ¨ÒåÔÚÁíÒ»¸öÀàµÄ·¶Î§µÄÀà.ÈçÏÂͼaÖеĴúÂ붨ÒåÁËÁ½¸ö¶ÀÁ¢µÄÀà:TestºÍA.ͼbµÄ´úÂ붨ÒåAΪTestµÄÒ»¸öÄÚ²¿Àà.

ͼcÖж¨ÒåÔÚOuterClassÖеÄInnerClassÀàÊÇÄÚ²¿ÀàµÄÁíÒ»¸öÀý×Ó.ÄÚ²¿Àà¿ÉÒÔÏñ³£¹æÀàÒ»ÑùʹÓÃ.ͨ³£,Èç¹ûÄÚ²¿ÀàÖ»ÊDZ»ÍⲿÀàʹÓÃ,ÄǾͽ«¸ÃÀඨÒåΪÄÚ²¿Àà.Ò»¸öÄÚ²¿ÀàÓÐÈçÏÂÌØÕ÷:
1.Ò»¸öÄÚ²¿Àà±»±àÒë³ÉÒ»¸öÃûΪOuterClassName$InnerClassName.classµÄÀà.ÀýÈç,ÔÚͼbÖÐTestÖеÄÄÚ²¿ÀàA±»±àÒë³ÉTest$A.class
2.ÄÚ²¿Àà¿ÉÒÔÒýÓö¨ÒåÔÚËüǶÌ×µÄÍⲿÀàÖеÄÊý¾ÝºÍ·½·¨,ËùÒÔ,²»ÐèÒª½«ÍⲿÀà¶ÔÏóµÄÒýÓô«µÝ¸öÄÚ²¿ÀàµÄ¹¹Ôì·½·¨.ÒòΪÕâ¸öÔÒò,ÄÚ²¿Àà¿ÉÒÔʹ³ÌÐò¸ü¼Ó¼òµ¥ºÍ¼ò½à.
3.ʹÓÿɼûÐÔÐÞÊηû¶¨ÒåÄÚ²¿Ààʱ,×ñ´ÓºÍÓ¦ÓÃÓëÔÚÀà³ÉÔ±ÉÏÒ»ÑùµÄ¿É¼ûÐÔ¹æÔò.
4.¿ÉÒÔ½«ÄÚ²¿ÀඨÒåΪstatic,Ò»¸östaticÄÚ²¿Àà¿ÉÒÔʹÓÃÍⲿÀàµÄÃû×Ö·ÃÎÊ.Ò»¸östaticÀàÊDz»ÄÜ·ÃÎÊÍⲿÀàµÄ·Ç¾²Ì¬³ÉÔ±µÄ.
5.ÄÚ²¿ÀàµÄ¶ÔÏó¾³£ÔÚÍⲿÀàÖд´½¨.µ«ÊÇ,Ò²¿ÉÒÔ´ÓÁíÒ»¸öÀàÖд´½¨Ò»¸öÄÚ²¿ÀàµÄ¶ÔÏó¡£Èç¹û¸ÃÄÚ²¿ÀàÊǷǾ²Ì¬µÄ,¾Í±ØÐëÏÈ´´½¨Ò»¸öÍⲿÀàµÄʵÀý,È»ºóʹÓÃÏÂÃæµÄÓï·¨´´½¨Ò»¸öÄÚ²¿ÀàµÄ¶ÔÏó:
OuterClass.InnerClass
innerObject = outerObject.new InnerClass(); |
Èç¹ûÄÚ²¿ÀàÊǾ²Ì¬µÄ,ÄÇôʹÓÃÏÂÃæµÄÓ﷨ΪËü´´½¨Ò»¸ö¶ÔÏó:
OuterClass.InnerClass
innerObject = new OuterClass.InnerClass(); |
|