仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1368|回复: 18
打印 上一主题 下一主题

[学习教程] 来看保举编码办法(java)

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。
外部类是新的事务模子,而且现实上旧的事务模子连同新库的特性都被它好的撑持,依附老式的编程办法无疑增添了一个新的凌乱的要素。如今有更多分歧的办法为我们编写厌恶的代码。恰巧的是,这类代码展现在本书中和程序样本中,而且乃至在文件和程序样本中同SUN公司区分开来。在这一节中,我们将看到一些关于我们会和不会运转新AWT的争吵,并由向我们展现除能够包涵的情形,我们能够随时利用吸收器类往办理我们的事务处置必要来停止。由于这类办法一样是最复杂和最明晰的办法,它将会对我们进修它组成无效的匡助。
在看就任何事之前,我们晓得只管Java1.1向后兼容Java1.0(也就是说,我们能够在1.1中编译和运转1.0的程序),但我们其实不能在统一个程序里夹杂事务模子。换言之,当我们试图集成老的代码到一个新的程序中时,我们不克不及利用老式的action()办法在统一个程序中,因而我们必需决意是不是对新程序利用老的,难以保护的办法大概晋级老的代码。这不会有太多的合作由于新的办法对老的办法而言是云云的优异。

1.原则:运转它的好办法
为了给我们一些事物来举行对照,这儿有一个程序例子演示向我们保举的办法。到如今它会变得相称的熟习和温馨。
  1. //:GoodIdea.java
  2. //Thebestwaytodesignclassesusingthenew
  3. //Java1.1eventmodel:useaninnerclassfor
  4. //eachdifferentevent.Thismaximizes
  5. //flexibilityandmodularity.
  6. importjava.awt.*;
  7. importjava.awt.event.*;
  8. importjava.util.*;
  9. publicclassGoodIdeaextendsFrame{
  10. Button
  11. b1=newButton("Button1"),
  12. b2=newButton("Button2");
  13. publicGoodIdea(){
  14. setLayout(newFlowLayout());
  15. b1.addActionListener(newB1L());
  16. b2.addActionListener(newB2L());
  17. add(b1);
  18. add(b2);
  19. }
  20. publicclassB1LimplementsActionListener{
  21. publicvoidactionPerformed(ActionEvente){
  22. System.out.println("Button1pressed");
  23. }
  24. }
  25. publicclassB2LimplementsActionListener{
  26. publicvoidactionPerformed(ActionEvente){
  27. System.out.println("Button2pressed");
  28. }
  29. }
  30. publicstaticvoidmain(String[]args){
  31. Framef=newGoodIdea();
  32. f.addWindowListener(
  33. newWindowAdapter(){
  34. publicvoidwindowClosing(WindowEvente){
  35. System.out.println("WindowClosing");
  36. System.exit(0);
  37. }
  38. });
  39. f.setSize(300,200);
  40. f.setVisible(true);
  41. }
  42. }///:~
复制代码
这是很有点微乎其微的:每一个按钮有它本人的印出一些事物到把持台的吸收器。但请注重在全部程序中这不是一个前提语句,大概是一些暗示“我想要晓得如何使事务产生”的语句。每块代码都与运转有关,而不是范例查验。也就是说,这是最好的编写我们的代码的办法;不单单是它更容易使我们了解观点,最少是使我们更容易浏览和保护。剪切和粘贴到新的程序是一样云云的简单。


2.将主类作为吸收器完成
第一个坏主张是一个一般的和保举的办法。这使得主类(有代表性的是程序片或帧,但它能酿成一些类)实行各类分歧的吸收器。上面是一个例子:
  1. //:BadIdea1.java
  2. //Someliteraturerecommendsthisapproach,
  3. //butitsmissingthepointofthenewevent
  4. //modelinJava1.1
  5. importjava.awt.*;
  6. importjava.awt.event.*;
  7. importjava.util.*;
  8. publicclassBadIdea1extendsFrame
  9. implementsActionListener,WindowListener{
  10. Button
  11. b1=newButton("Button1"),
  12. b2=newButton("Button2");
  13. publicBadIdea1(){
  14. setLayout(newFlowLayout());
  15. addWindowListener(this);
  16. b1.addActionListener(this);
  17. b2.addActionListener(this);
  18. add(b1);
  19. add(b2);
  20. }
  21. publicvoidactionPerformed(ActionEvente){
  22. Objectsource=e.getSource();
  23. if(source==b1)
  24. System.out.println("Button1pressed");
  25. elseif(source==b2)
  26. System.out.println("Button2pressed");
  27. else
  28. System.out.println("Somethingelse");
  29. }
  30. publicvoidwindowClosing(WindowEvente){
  31. System.out.println("WindowClosing");
  32. System.exit(0);
  33. }
  34. publicvoidwindowClosed(WindowEvente){}
  35. publicvoidwindowDeiconified(WindowEvente){}
  36. publicvoidwindowIconified(WindowEvente){}
  37. publicvoidwindowActivated(WindowEvente){}
  38. publicvoidwindowDeactivated(WindowEvente){}
  39. publicvoidwindowOpened(WindowEvente){}
  40. publicstaticvoidmain(String[]args){
  41. Framef=newBadIdea1();
  42. f.setSize(300,200);
  43. f.setVisible(true);
  44. }
  45. }///:~
复制代码
如许做的用处显现鄙人述三行里:
addWindowListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
由于Badidea1实行举措吸收器和窗中吸收器,这些程序行固然能够承受,而且假如我们一向保持想法使大批的类往削减服务器检索时代的程序片载进的作法,它看起来酿成一个不错的主张。可是:
(1)Java1.1版撑持JAR文件,因而一切我们的文件能够被安排到一个单一的紧缩的JAR文件中,只必要一次服务器检索。我们不再必要为Internet效力而削减类的数目。
(2)下面的代码的组件加倍的少,因而它难以捉住和粘贴。注重我们必需不但要实行林林总总的接口为我们的主类,但在actionPerformed()办法中,我们使用一串前提语句测试哪一个举措被完成了。不单单是这个形态发展,阔别吸收器模子,除此以外,我们不克不及复杂地反复利用actionPerformed()办法由于它是指定为这个特别的使用程序利用的。将这个程序例子与GoodIdea.java举行对照,我们能够恰好捕获一个吸收器类并粘贴它和最小的焦心就任何中央。别的我们能够为一个独自的事务注册多个吸收器类,同意乃至更多的模块在每一个吸收器类在每一个吸收器中运转。

3.办法的夹杂
第二个badidea夹杂了两种办法:利用内嵌吸收器类,但一样实行一个或更多的吸收器接口以作为主类的一部分。这类办法无需在书中和文件中举行注释,并且我能够揣测到Java开辟者以为他们必需为分歧的目标而接纳分歧的办法。但我们却不用——在我们编程时,我们也许大概会偏向于利用内嵌吸收器类。
  1. //:BadIdea2.java
  2. //AnimprovementoverBadIdea1.java,sinceit
  3. //usestheWindowAdapterasaninnerclass
  4. //insteadofimplementingallthemethodsof
  5. //WindowListener,butstillmissesthe
  6. //valuablemodularityofinnerclasses
  7. importjava.awt.*;
  8. importjava.awt.event.*;
  9. importjava.util.*;
  10. publicclassBadIdea2extendsFrame
  11. implementsActionListener{
  12. Button
  13. b1=newButton("Button1"),
  14. b2=newButton("Button2");
  15. publicBadIdea2(){
  16. setLayout(newFlowLayout());
  17. addWindowListener(newWL());
  18. b1.addActionListener(this);
  19. b2.addActionListener(this);
  20. add(b1);
  21. add(b2);
  22. }
  23. publicvoidactionPerformed(ActionEvente){
  24. Objectsource=e.getSource();
  25. if(source==b1)
  26. System.out.println("Button1pressed");
  27. elseif(source==b2)
  28. System.out.println("Button2pressed");
  29. else
  30. System.out.println("Somethingelse");
  31. }
  32. classWLextendsWindowAdapter{
  33. publicvoidwindowClosing(WindowEvente){
  34. System.out.println("WindowClosing");
  35. System.exit(0);
  36. }
  37. }
  38. publicstaticvoidmain(String[]args){
  39. Framef=newBadIdea2();
  40. f.setSize(300,200);
  41. f.setVisible(true);
  42. }
  43. }///:~
复制代码
由于actionPerformed()举措完成办法同主类严密地分离,以是难以复用代码。它的代码读起来一样是混乱和使人腻烦的,远远凌驾了外部类办法。分歧理的是,我们不能不在Java1.1版中为事务利用那些老的思绪。

4.承继一个组件
创立一个新范例的组件时,在运转事务的老办法中,我们会常常看到分歧的中央产生了变更。这里有一个程序例子来演示这类新的事情办法:
  1. //:GoodTechnique.java
  2. //Yourfirstchoicewhenoverridingcomponents
  3. //shouldbetoinstalllisteners.Thecodeis
  4. //muchsafer,moremodularandmaintainable.
  5. importjava.awt.*;
  6. importjava.awt.event.*;
  7. classDisplay{
  8. publicstaticfinalint
  9. EVENT=0,COMPONENT=1,
  10. MOUSE=2,MOUSE_MOVE=3,
  11. FOCUS=4,KEY=5,ACTION=6,
  12. LAST=7;
  13. publicString[]evnt;
  14. Display(){
  15. evnt=newString[LAST];
  16. for(inti=0;i<LAST;i++)
  17. evnt[i]=newString();
  18. }
  19. publicvoidshow(Graphicsg){
  20. for(inti=0;i<LAST;i++)
  21. g.drawString(evnt[i],0,10*i+10);
  22. }
  23. }
  24. classEnabledPanelextendsPanel{
  25. Colorc;
  26. intid;
  27. Displaydisplay=newDisplay();
  28. publicEnabledPanel(inti,Colormc){
  29. id=i;
  30. c=mc;
  31. setLayout(newBorderLayout());
  32. add(newMyButton(),BorderLayout.SOUTH);
  33. addComponentListener(newCL());
  34. addFocusListener(newFL());
  35. addKeyListener(newKL());
  36. addMouseListener(newML());
  37. addMouseMotionListener(newMML());
  38. }
  39. //Toeliminateflicker:
  40. publicvoidupdate(Graphicsg){
  41. paint(g);
  42. }
  43. publicvoidpaint(Graphicsg){
  44. g.setColor(c);
  45. Dimensions=getSize();
  46. g.fillRect(0,0,s.width,s.height);
  47. g.setColor(Color.black);
  48. display.show(g);
  49. }
  50. //Dontneedtoenableanythingforthis:
  51. publicvoidprocessEvent(AWTEvente){
  52. display.evnt[Display.EVENT]=e.toString();
  53. repaint();
  54. super.processEvent(e);
  55. }
  56. classCLimplementsComponentListener{
  57. publicvoidcomponentMoved(ComponentEvente){
  58. display.evnt[Display.COMPONENT]=
  59. "Componentmoved";
  60. repaint();
  61. }
  62. publicvoid
  63. componentResized(ComponentEvente){
  64. display.evnt[Display.COMPONENT]=
  65. "Componentresized";
  66. repaint();
  67. }
  68. publicvoid
  69. componentHidden(ComponentEvente){
  70. display.evnt[Display.COMPONENT]=
  71. "Componenthidden";
  72. repaint();
  73. }
  74. publicvoidcomponentShown(ComponentEvente){
  75. display.evnt[Display.COMPONENT]=
  76. "Componentshown";
  77. repaint();
  78. }
  79. }
  80. classFLimplementsFocusListener{
  81. publicvoidfocusGained(FocusEvente){
  82. display.evnt[Display.FOCUS]=
  83. "FOCUSgained";
  84. repaint();
  85. }
  86. publicvoidfocusLost(FocusEvente){
  87. display.evnt[Display.FOCUS]=
  88. "FOCUSlost";
  89. repaint();
  90. }
  91. }
  92. classKLimplementsKeyListener{
  93. publicvoidkeyPressed(KeyEvente){
  94. display.evnt[Display.KEY]=
  95. "KEYpressed:";
  96. showCode(e);
  97. }
  98. publicvoidkeyReleased(KeyEvente){
  99. display.evnt[Display.KEY]=
  100. "KEYreleased:";
  101. showCode(e);
  102. }
  103. publicvoidkeyTyped(KeyEvente){
  104. display.evnt[Display.KEY]=
  105. "KEYtyped:";
  106. showCode(e);
  107. }
  108. voidshowCode(KeyEvente){
  109. intcode=e.getKeyCode();
  110. display.evnt[Display.KEY]+=
  111. KeyEvent.getKeyText(code);
  112. repaint();
  113. }
  114. }
  115. classMLimplementsMouseListener{
  116. publicvoidmouseClicked(MouseEvente){
  117. requestFocus();//GetFOCUSonclick
  118. display.evnt[Display.MOUSE]=
  119. "MOUSEclicked";
  120. showMouse(e);
  121. }
  122. publicvoidmousePressed(MouseEvente){
  123. display.evnt[Display.MOUSE]=
  124. "MOUSEpressed";
  125. showMouse(e);
  126. }
  127. publicvoidmouseReleased(MouseEvente){
  128. display.evnt[Display.MOUSE]=
  129. "MOUSEreleased";
  130. showMouse(e);
  131. }
  132. publicvoidmouseEntered(MouseEvente){
  133. display.evnt[Display.MOUSE]=
  134. "MOUSEentered";
  135. showMouse(e);
  136. }
  137. publicvoidmouseExited(MouseEvente){
  138. display.evnt[Display.MOUSE]=
  139. "MOUSEexited";
  140. showMouse(e);
  141. }
  142. voidshowMouse(MouseEvente){
  143. display.evnt[Display.MOUSE]+=
  144. ",x="+e.getX()+
  145. ",y="+e.getY();
  146. repaint();
  147. }
  148. }
  149. classMMLimplementsMouseMotionListener{
  150. publicvoidmouseDragged(MouseEvente){
  151. display.evnt[Display.MOUSE_MOVE]=
  152. "MOUSEdragged";
  153. showMouse(e);
  154. }
  155. publicvoidmouseMoved(MouseEvente){
  156. display.evnt[Display.MOUSE_MOVE]=
  157. "MOUSEmoved";
  158. showMouse(e);
  159. }
  160. voidshowMouse(MouseEvente){
  161. display.evnt[Display.MOUSE_MOVE]+=
  162. ",x="+e.getX()+
  163. ",y="+e.getY();
  164. repaint();
  165. }
  166. }
  167. }
  168. classMyButtonextendsButton{
  169. intclickCounter;
  170. Stringlabel="";
  171. publicMyButton(){
  172. addActionListener(newAL());
  173. }
  174. publicvoidpaint(Graphicsg){
  175. g.setColor(Color.green);
  176. Dimensions=getSize();
  177. g.fillRect(0,0,s.width,s.height);
  178. g.setColor(Color.black);
  179. g.drawRect(0,0,s.width-1,s.height-1);
  180. drawLabel(g);
  181. }
  182. privatevoiddrawLabel(Graphicsg){
  183. FontMetricsfm=g.getFontMetrics();
  184. intwidth=fm.stringWidth(label);
  185. intheight=fm.getHeight();
  186. intascent=fm.getAscent();
  187. intleading=fm.getLeading();
  188. inthorizMargin=
  189. (getSize().width-width)/2;
  190. intverMargin=
  191. (getSize().height-height)/2;
  192. g.setColor(Color.red);
  193. g.drawString(label,horizMargin,
  194. verMargin+ascent+leading);
  195. }
  196. classALimplementsActionListener{
  197. publicvoidactionPerformed(ActionEvente){
  198. clickCounter++;
  199. label="click#"+clickCounter+
  200. ""+e.toString();
  201. repaint();
  202. }
  203. }
  204. }
  205. publicclassGoodTechniqueextendsFrame{
  206. GoodTechnique(){
  207. setLayout(newGridLayout(2,2));
  208. add(newEnabledPanel(1,Color.cyan));
  209. add(newEnabledPanel(2,Color.lightGray));
  210. add(newEnabledPanel(3,Color.yellow));
  211. }
  212. publicstaticvoidmain(String[]args){
  213. Framef=newGoodTechnique();
  214. f.setTitle("GoodTechnique");
  215. f.addWindowListener(
  216. newWindowAdapter(){
  217. publicvoidwindowClosing(WindowEvente){
  218. System.out.println(e);
  219. System.out.println("WindowClosing");
  220. System.exit(0);
  221. }
  222. });
  223. f.setSize(700,700);
  224. f.setVisible(true);
  225. }
  226. }///:~
复制代码
这个程序例子一样证实了林林总总的发明和显现关于它们的信息的事务。这类显现是一种会合显现信息的办法。一组字符串往猎取关于每品种型的事务的信息,而且show()办法对任何图象对象都设置了一个句柄,我们接纳并间接地写在表面代码上。这类计划是成心的被某种事务反复利用。
激活面板代表了这类新型的组件。它是一个底部有一个按钮的黑色的面板,而且它由使用吸收器类为每个独自的事务来激发捕获一切产生在它之上的事务,除那些在激活面板过载的老式的processEvent()办法(注重它应当一样挪用super.processEvent())。使用这类办法的独一来由是它捕获产生的每个事务,因而我们能够察看延续产生的每事务。processEvent()办法没有更多的展现代表每一个事务的字符串,不然它会不能不利用一串前提语句往寻觅事务。在别的方面,内嵌吸收类早已明晰地晓得被发明的事务。(假定我们注册它们到组件,我们不必要任何的控件的逻辑,这将成为我们的目标。)因而,它们不会往反省任何事务;这些事务恰好做它们的原质料。
每一个吸收器修正显现字符串和它的指定事务,而且挪用重画办法repaint()因而将显现这个字符串。我们一样能注重到一个一般能打消闪灼的法门:
publicvoidupdate(Graphicsg){
paint(g);
}
我们不会一直必要过载update(),但假如我们写下一些闪灼的程序,并运转它。默许的最新版本的扫除背景然后挪用paint()办法从头画出一些丹青。这个扫除举措一般会发生闪灼,可是不用要的,由于paint()重画了全部的表面。
我们能够看到很多的吸收器——可是,对吸收器输出反省指令,但我们却不克不及吸收任何组件不撑持的事务。(不像BadTechnuque.java那样我们能每时每刻看到)。
实验这个程序是非常的有教导意义的,由于我们进修了很多的关于在Java中事务产生的办法。一则它展现了年夜多半开窗口的体系中计划上的瑕疵:它相称的难以往单击和开释鼠标,除非挪动它,而且当我们实践上正试图用鼠标单击在某物体上时开窗口的会经常以为我们是在拖动。一个办理这个成绩的计划是利用mousePressed()鼠标按下办法和mouseReleased()鼠标开释办法往取代mouseClicked()鼠标单击办法,然后判别是不是往挪用我们本人的以工夫和4个像素的鼠标滞后感化的“mouseReallyClicked()实在的鼠标单击”办法。

5.糟糕的组件承继
另外一种做法是挪用enableEvent()办法,并将与但愿把持的事务对应的模子传送给它(很多参考书中都曾说起这类做法)。如许做会形成那些事务被发送至老式办法(只管它们对Java1.1来讲是新的),并接纳象processFocusEvent()如许的名字。也必需要记着挪用基本类版本。上面是它看起来的模样。
  1. //:BadTechnique.java
  2. //Itspossibletooverridecomponentsthisway,
  3. //butthelistenerapproachismuchbetter,so
  4. //whywouldyou?
  5. importjava.awt.*;
  6. importjava.awt.event.*;
  7. classDisplay{
  8. publicstaticfinalint
  9. EVENT=0,COMPONENT=1,
  10. MOUSE=2,MOUSE_MOVE=3,
  11. FOCUS=4,KEY=5,ACTION=6,
  12. LAST=7;
  13. publicString[]evnt;
  14. Display(){
  15. evnt=newString[LAST];
  16. for(inti=0;i<LAST;i++)
  17. evnt[i]=newString();
  18. }
  19. publicvoidshow(Graphicsg){
  20. for(inti=0;i<LAST;i++)
  21. g.drawString(evnt[i],0,10*i+10);
  22. }
  23. }
  24. classEnabledPanelextendsPanel{
  25. Colorc;
  26. intid;
  27. Displaydisplay=newDisplay();
  28. publicEnabledPanel(inti,Colormc){
  29. id=i;
  30. c=mc;
  31. setLayout(newBorderLayout());
  32. add(newMyButton(),BorderLayout.SOUTH);
  33. //Typecheckingislost.Youcanenableand
  34. //processeventsthatthecomponentdoesnt
  35. //capture:
  36. enableEvents(
  37. //Paneldoesnthandlethese:
  38. AWTEvent.ACTION_EVENT_MASK|
  39. AWTEvent.ADJUSTMENT_EVENT_MASK|
  40. AWTEvent.ITEM_EVENT_MASK|
  41. AWTEvent.TEXT_EVENT_MASK|
  42. AWTEvent.WINDOW_EVENT_MASK|
  43. //Panelcanhandlethese:
  44. AWTEvent.COMPONENT_EVENT_MASK|
  45. AWTEvent.FOCUS_EVENT_MASK|
  46. AWTEvent.KEY_EVENT_MASK|
  47. AWTEvent.MOUSE_EVENT_MASK|
  48. AWTEvent.MOUSE_MOTION_EVENT_MASK|
  49. AWTEvent.CONTAINER_EVENT_MASK);
  50. //Youcanenableaneventwithout
  51. //overridingitsprocessmethod.
  52. }
  53. //Toeliminateflicker:
  54. publicvoidupdate(Graphicsg){
  55. paint(g);
  56. }
  57. publicvoidpaint(Graphicsg){
  58. g.setColor(c);
  59. Dimensions=getSize();
  60. g.fillRect(0,0,s.width,s.height);
  61. g.setColor(Color.black);
  62. display.show(g);
  63. }
  64. publicvoidprocessEvent(AWTEvente){
  65. display.evnt[Display.EVENT]=e.toString();
  66. repaint();
  67. super.processEvent(e);
  68. }
  69. publicvoid
  70. processComponentEvent(ComponentEvente){
  71. switch(e.getID()){
  72. caseComponentEvent.COMPONENT_MOVED:
  73. display.evnt[Display.COMPONENT]=
  74. "Componentmoved";
  75. break;
  76. caseComponentEvent.COMPONENT_RESIZED:
  77. display.evnt[Display.COMPONENT]=
  78. "Componentresized";
  79. break;
  80. caseComponentEvent.COMPONENT_HIDDEN:
  81. display.evnt[Display.COMPONENT]=
  82. "Componenthidden";
  83. break;
  84. caseComponentEvent.COMPONENT_SHOWN:
  85. display.evnt[Display.COMPONENT]=
  86. "Componentshown";
  87. break;
  88. default:
  89. }
  90. repaint();
  91. //Mustalwaysremembertocallthe"super"
  92. //versionofwhateveryouoverride:
  93. super.processComponentEvent(e);
  94. }
  95. publicvoidprocessFocusEvent(FocusEvente){
  96. switch(e.getID()){
  97. caseFocusEvent.FOCUS_GAINED:
  98. display.evnt[Display.FOCUS]=
  99. "FOCUSgained";
  100. break;
  101. caseFocusEvent.FOCUS_LOST:
  102. display.evnt[Display.FOCUS]=
  103. "FOCUSlost";
  104. break;
  105. default:
  106. }
  107. repaint();
  108. super.processFocusEvent(e);
  109. }
  110. publicvoidprocessKeyEvent(KeyEvente){
  111. switch(e.getID()){
  112. caseKeyEvent.KEY_PRESSED:
  113. display.evnt[Display.KEY]=
  114. "KEYpressed:";
  115. break;
  116. caseKeyEvent.KEY_RELEASED:
  117. display.evnt[Display.KEY]=
  118. "KEYreleased:";
  119. break;
  120. caseKeyEvent.KEY_TYPED:
  121. display.evnt[Display.KEY]=
  122. "KEYtyped:";
  123. break;
  124. default:
  125. }
  126. intcode=e.getKeyCode();
  127. display.evnt[Display.KEY]+=
  128. KeyEvent.getKeyText(code);
  129. repaint();
  130. super.processKeyEvent(e);
  131. }
  132. publicvoidprocessMouseEvent(MouseEvente){
  133. switch(e.getID()){
  134. caseMouseEvent.MOUSE_CLICKED:
  135. requestFocus();//GetFOCUSonclick
  136. display.evnt[Display.MOUSE]=
  137. "MOUSEclicked";
  138. break;
  139. caseMouseEvent.MOUSE_PRESSED:
  140. display.evnt[Display.MOUSE]=
  141. "MOUSEpressed";
  142. break;
  143. caseMouseEvent.MOUSE_RELEASED:
  144. display.evnt[Display.MOUSE]=
  145. "MOUSEreleased";
  146. break;
  147. caseMouseEvent.MOUSE_ENTERED:
  148. display.evnt[Display.MOUSE]=
  149. "MOUSEentered";
  150. break;
  151. caseMouseEvent.MOUSE_EXITED:
  152. display.evnt[Display.MOUSE]=
  153. "MOUSEexited";
  154. break;
  155. default:
  156. }
  157. display.evnt[Display.MOUSE]+=
  158. ",x="+e.getX()+
  159. ",y="+e.getY();
  160. repaint();
  161. super.processMouseEvent(e);
  162. }
  163. publicvoid
  164. processMouseMotionEvent(MouseEvente){
  165. switch(e.getID()){
  166. caseMouseEvent.MOUSE_DRAGGED:
  167. display.evnt[Display.MOUSE_MOVE]=
  168. "MOUSEdragged";
  169. break;
  170. caseMouseEvent.MOUSE_MOVED:
  171. display.evnt[Display.MOUSE_MOVE]=
  172. "MOUSEmoved";
  173. break;
  174. default:
  175. }
  176. display.evnt[Display.MOUSE_MOVE]+=
  177. ",x="+e.getX()+
  178. ",y="+e.getY();
  179. repaint();
  180. super.processMouseMotionEvent(e);
  181. }
  182. }
  183. classMyButtonextendsButton{
  184. intclickCounter;
  185. Stringlabel="";
  186. publicMyButton(){
  187. enableEvents(AWTEvent.ACTION_EVENT_MASK);
  188. }
  189. publicvoidpaint(Graphicsg){
  190. g.setColor(Color.green);
  191. Dimensions=getSize();
  192. g.fillRect(0,0,s.width,s.height);
  193. g.setColor(Color.black);
  194. g.drawRect(0,0,s.width-1,s.height-1);
  195. drawLabel(g);
  196. }
  197. privatevoiddrawLabel(Graphicsg){
  198. FontMetricsfm=g.getFontMetrics();
  199. intwidth=fm.stringWidth(label);
  200. intheight=fm.getHeight();
  201. intascent=fm.getAscent();
  202. intleading=fm.getLeading();
  203. inthorizMargin=
  204. (getSize().width-width)/2;
  205. intverMargin=
  206. (getSize().height-height)/2;
  207. g.setColor(Color.red);
  208. g.drawString(label,horizMargin,
  209. verMargin+ascent+leading);
  210. }
  211. publicvoidprocessActionEvent(ActionEvente){
  212. clickCounter++;
  213. label="click#"+clickCounter+
  214. ""+e.toString();
  215. repaint();
  216. super.processActionEvent(e);
  217. }
  218. }
  219. publicclassBadTechniqueextendsFrame{
  220. BadTechnique(){
  221. setLayout(newGridLayout(2,2));
  222. add(newEnabledPanel(1,Color.cyan));
  223. add(newEnabledPanel(2,Color.lightGray));
  224. add(newEnabledPanel(3,Color.yellow));
  225. //YoucanalsodoitforWindows:
  226. enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  227. }
  228. publicvoidprocessWindowEvent(WindowEvente){
  229. System.out.println(e);
  230. if(e.getID()==WindowEvent.WINDOW_CLOSING){
  231. System.out.println("WindowClosing");
  232. System.exit(0);
  233. }
  234. }
  235. publicstaticvoidmain(String[]args){
  236. Framef=newBadTechnique();
  237. f.setTitle("BadTechnique");
  238. f.setSize(700,700);
  239. f.setVisible(true);
  240. }
  241. }///:~
复制代码
切实其实,它可以事情。但却其实太糟糕,并且很难编写、浏览、调试、保护和再生。既然云云,为何还不利用外部吸收器类呢?
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
老尸 该用户已被删除
沙发
发表于 2015-1-21 10:40:25 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
蒙在股里 该用户已被删除
板凳
发表于 2015-1-30 21:53:04 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
地板
发表于 2015-2-3 15:03:50 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
变相怪杰 该用户已被删除
5#
发表于 2015-2-8 23:51:23 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
简单生活 该用户已被删除
6#
发表于 2015-2-20 18:40:35 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
海妖 该用户已被删除
7#
发表于 2015-3-4 05:30:49 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-11 17:25:30 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
莫相离 该用户已被删除
9#
发表于 2015-3-16 03:58:37 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
小魔女 该用户已被删除
10#
发表于 2015-3-18 14:50:37 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
爱飞 该用户已被删除
11#
发表于 2015-3-24 21:35:52 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
再见西城 该用户已被删除
12#
发表于 2015-3-25 04:04:15 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
柔情似水 该用户已被删除
13#
 楼主| 发表于 2015-3-26 19:16:04 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
金色的骷髅 该用户已被删除
14#
发表于 2015-3-29 17:10:16 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
透明 该用户已被删除
15#
发表于 2015-4-25 09:36:14 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
兰色精灵 该用户已被删除
16#
发表于 2015-4-26 01:58:45 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
小女巫 该用户已被删除
17#
发表于 2015-5-4 06:06:06 | 只看该作者
是一种突破用户端机器环境和CPU
深爱那片海 该用户已被删除
18#
发表于 2015-6-4 04:37:06 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
活着的死人 该用户已被删除
19#
发表于 2015-6-7 05:07:54 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-29 08:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表