《Java编程思想》读书笔记(9)

一些listene接口中只定义了一个方法,因此要实现这种接口的工作量并不大,因为只要写完这一个方法,接口也就实现了。但是如果要使用有多个方法的listener的话,就会比较麻烦了,因为必须要实现接口中定义的所有方法,而实际上很多方法我们并不需要。举例来说,如果要捕捉鼠标点击的话,那就必须写一个mouseClicked( )方法。但是由于MouseListener是一个interface,所以即使MouseListener定义的其他方法我们不使用,也得实现其所有的方法。

为了解决这个问题,有些(但不是全部)多方法的listener接口提供了适配器(adapter)。适配器会为接口提供默认的空方法。这样,你只要继承适配器,根据需要覆写方法就可以了。

例如:

None.gif packagecom.vitamin.UI;
None.gif
None.gifimportjava.awt.BorderLayout;
None.gifimportjava.awt.Container;
None.gifimportjava.awt.Event;
None.gifimportjava.awt.event.ActionEvent;
None.gifimportjava.awt.event.ActionListener;
None.gifimportjava.awt.event.MouseAdapter;
None.gifimportjava.awt.event.*;
None.gif
None.gifimportjavax.swing.*;
None.gif
None.gifpublicclassHelloFormextendsJFrame
None.gif{
None.gifprivateJLabellbInfo=null;
None.gifprivateJButtonbtnOK=null;
None.gif
None.gifpublicHelloForm()
None.gif{
None.gifsuper();
None.gif}
None.gifpublicHelloForm(Stringtitle)
None.gif{
None.gifsuper(title);
None.gifthis.initForm();
None.gif}
None.gif
None.gifprivatevoidinitForm()
None.gif{
None.gifthis.lbInfo=newJLabel();
None.gifthis.btnOK=newJButton("确定");
None.gif
None.gifthis.btnOK.addMouseListener(newMouseAdapter()
None.gif{
None.gifpublicvoidmouseClicked(MouseEvente){
None.giflbInfo.setText("hello,world");
None.gif}
None.gif});

None.gif
None.gif
None.gif
None.gifContainercon=this.getContentPane();
None.gifcon.setLayout(newBorderLayout());
None.gifcon.add(this.btnOK,BorderLayout.SOUTH);
None.gifcon.add(this.lbInfo,BorderLayout.NORTH);
None.gif
None.gifthis.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
None.gifthis.setSize(300,300);
None.gifthis.setVisible(true);
None.gif}
None.gif/**
None.gif*@paramargs
None.gif*/
None.gifpublicstaticvoidmain(String[]args)
None.gif{
None.gifHelloFormhf=newHelloForm("内部匿名类测试程序");
None.gif
None.gif}
None.gif
None.gif}
None.gif

在附上<<TIJ>>中给出的一段处理多个事件的代码:
None.gif packagecom.vitamin.UI;
None.gif
None.gifimportjavax.swing.
* ;
None.gifimportjava.awt.
* ;
None.gifimportjava.awt.
event . * ;
None.gifimportjava.util.
* ;
None.gifimportcom.vitamin.Console.console;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public class TrackEventextendsJApplet dot.gif {
InBlock.gif
privateHashMaph=newHashMap();
ExpandedSubBlockStart.gifContractedSubBlock.gif
privateString[]event=dot.gif{
InBlock.gif
"focusGained","focusLost","keyPressed",
InBlock.gif
"keyReleased","keyTyped","mouseClicked",
InBlock.gif
"mouseEntered","mouseExited","mousePressed",
InBlock.gif
"mouseReleased","mouseDragged","mouseMoved"
ExpandedSubBlockEnd.gif}
;
InBlock.gif
privateMyButton
InBlock.gifb1
=newMyButton(Color.BLUE,"test1"),
InBlock.gifb2
=newMyButton(Color.RED,"test2");
ExpandedSubBlockStart.gifContractedSubBlock.gif
classMyButtonextendsJButtondot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
voidreport(Stringfield,Stringmsg)dot.gif{
InBlock.gif((JTextField)h.
get(field)).setText(msg);
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gifFocusListenerfl
=newFocusListener()dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidfocusGained(FocusEvente)dot.gif{
InBlock.gifreport(
"focusGained",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidfocusLost(FocusEvente)dot.gif{
InBlock.gifreport(
"focusLost",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}
;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifKeyListenerkl
=newKeyListener()dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidkeyPressed(KeyEvente)dot.gif{
InBlock.gifreport(
"keyPressed",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidkeyReleased(KeyEvente)dot.gif{
InBlock.gifreport(
"keyReleased",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidkeyTyped(KeyEvente)dot.gif{
InBlock.gifreport(
"keyTyped",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}
;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifMouseListenerml
=newMouseListener()dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidmouseClicked(MouseEvente)dot.gif{
InBlock.gifreport(
"mouseClicked",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidmouseEntered(MouseEvente)dot.gif{
InBlock.gifreport(
"mouseEntered",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidmouseExited(MouseEvente)dot.gif{
InBlock.gifreport(
"mouseExited",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidmousePressed(MouseEvente)dot.gif{
InBlock.gifreport(
"mousePressed",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidmouseReleased(MouseEvente)dot.gif{
InBlock.gifreport(
"mouseReleased",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}
;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifMouseMotionListenermml
=newMouseMotionListener()dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidmouseDragged(MouseEvente)dot.gif{
InBlock.gifreport(
"mouseDragged",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidmouseMoved(MouseEvente)dot.gif{
InBlock.gifreport(
"mouseMoved",e.paramString());
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}
;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
publicMyButton(Colorcolor,Stringlabel)dot.gif{
InBlock.gifsuper(label);
InBlock.gifsetBackground(color);
InBlock.gifaddFocusListener(fl);
InBlock.gifaddKeyListener(kl);
InBlock.gifaddMouseListener(ml);
InBlock.gifaddMouseMotionListener(mml);
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicvoidinit()dot.gif{
InBlock.gifContainerc
=getContentPane();
InBlock.gifc.setLayout(
newGridLayout(event.length+1,2));
ExpandedSubBlockStart.gifContractedSubBlock.gif
for(inti=0;i<event.length;i++)dot.gif{
InBlock.gifJTextFieldt
=newJTextField();
InBlock.gift.setEditable(
false);
InBlock.gifc.add(
newJLabel(event[i],JLabel.RIGHT));
InBlock.gifc.add(t);
InBlock.gifh.put(
event[i],t);
ExpandedSubBlockEnd.gif}

InBlock.gifc.add(b1);
InBlock.gifc.add(b2);
ExpandedSubBlockEnd.gif}

ExpandedSubBlockStart.gifContractedSubBlock.gif
publicstaticvoidmain(String[]args)dot.gif{
InBlock.gifconsole.run(
newTrackEvent(),700,500);
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}
另外,今天还尝试了下手工打包可执行的jar文件,可没有成功,找不到原因,郁闷。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值