问题描述
importjava.awt.*;classFirstWindowextendsFrame{MenuBarmenubar;Menumenu;MenuItemitem1,item2;FirstWindow(Strings){setTitle(s);Toolkittool=getToolkit();Dimensiondim=tool.getScreenSize();setBounds(0,0,dim.width,dim.height/2);menubar=newMenuBar();menu=newMenu("文件");item1=newMenuItem("打开");item2=newMenuItem("保存");menu.add(item1);menu.add(item2);menubar.add(menu);setMenuBar(menubar);setVisible(true);}}publicclassExample7_1{publicstaticvoidmain(Stringargs[]){FirstWindowwin=newFirstWindow("一个带菜单的窗口");}}上面的这个程序,程序入口应该:publicstaticvoidmain(Stringargs[]){FirstWindowwin=newFirstWindow("一个带菜单的窗口");}那么入口函数进去了执行newFirstWindow("一个带菜单的窗口")方法,程序是怎么去执行第一个FirstWindow类的呢,我感觉好像没有去调用或执行第一个类啊。即便是通过newFirstWindow("一个带菜单的窗口")这句话去调用了一个类的FirstWindow(Strings),方法,那么这个方法前面的MenuBarmenubar;Menumenu;MenuItemitem1,item2;这些语句也没有执行,那么后面怎么能直接用menubar,menu,item1,item2这些对象呢?原理上有些不明白,麻烦来帮解释下.第二个程序:importjava.awt.*;classWindowTextextendsFrame{TextFieldtext1,text2;WindowText(Strings){super(s);setLayout(newFlowLayout());text1=newTextField("输入密码:",10);text1.setEditable(false);text2=newTextField(10);text2.setEchoChar('*');add(text1);add(text2);setBounds(100,100,200,150);setVisible(true);validate();}}publicclassExample7_2{publicstaticvoidmain(Stringargs[]){WindowTextwin=newWindowText("添加了文本框的窗口");}}程序中的这些代码:add(text1);add(text2);setBounds(100,100,200,150);setVisible(true);怎么能直接用方法呢,我感觉应该是用“对象.add(text1);对象.add(text2);对象.setBounds(100,100,200,150);”这样的格式,即对象加点来调用这些方法才对吧?第三个问题:java中的“焦点”(比如获得文本框中的输入焦点)究竟是什么意思,麻烦用通俗易懂的话来解释下,谢谢
解决方案
解决方案二:
/*在你FirstWindowwin=newFirstWindow("一个带菜单的窗口");时就已经执FirstWindow(Strings),这个构选函数的啊.而在构造函数前就已经执行了MenuBarmenubar;Menumenu;MenuItemitem1,item2*/
add(text1);add方法是从Frame继承过来的光标停留在输入框时,这里该输入框就有输入焦点
解决方案三:
...
解决方案四:
第一个:MenuBarmenubar;Menumenu;MenuItemitem1,item2;这几个东西只是声明了几个变量而已,真正用到的是在程序中实例化的时候。menubar=newMenuBar();menu=newMenu("文件");item1=newMenuItem("打开");item2=newMenuItem("保存");你要想理解变量的东西,你要知道程序的运行机制,其实那几个变量时在内存中创建了,需要了解一点操作系统的知识。第三个:"焦点"通俗的讲就是让人家把目光集中到你身上,在图形用户界面中就是把输入的权利赋予某个文本域之类的。
解决方案五:
引用1楼soleisure的回复:
Javacode/*在你FirstWindowwin=newFirstWindow("一个带菜单的窗口");时就已经执FirstWindow(Strings),这个构选函数的啊.而在构造函数前就已经执行了MenuBarmenubar;Menumenu;MenuItemitem1,item2*/
还是有些不明白你的解释,明明程序执行是从main函数开始,感觉第一个类应该没有执行。你的意思是说在程序运行FirstWindowwin=newFirstWindow("一个带菜单的窗口")这条语句的同时去调用FirstWindow(Strings)这条语句吗??
解决方案六:
应该说是去实例化一个FirstWindow对象,而那些变量都在实例化的过程中被声明了
解决方案七:
第一个:FirstWindow()是构造方法,是用来给属性初始化的。menubar等是该类的属性,该类的所有方法都是可以访问它们。第二个:this.可以省略。第三个:“焦点”就是鼠标光标停留的位置。
解决方案八:
第一个问题classFirstWindowextendsFrameFirstWindow继承Frame你用的应该是JAVA的AWT也就是说你的FirstWindow拥有父类Frame的所有方法FirstWidnow()是你的FirstWidnow类中的构造函数....在Main主函数中FirstWindowwin=newFirstWindow("一个带菜单的窗口");创建的是一个FirstWindow的实例....Main函数在执行这条语句后会调用构造函数里面的内容,你代码的意思是在这个窗口中添加菜单条,菜单,菜单项.....这些语句的实现由编辑程序帮你完成...程序运行后你就可以看见你的窗口中有你添加的这些组件.......
解决方案九:
第二问题.....是可以直接用方法的..如果在逻辑上面你想不通,也可以使用this.add()this代表的就是当前类的实例对象....类是不能直接使用对应方法的只有实例化后产生对象后才能使用对应Class的方法你代码里面的方法来源于WindowText这个类而这个类是你自定义的是没有法方可以用的..应为他继承Frame所以它拥有Frame的所有法方...子类可以拥有父类的所有法方,并且拥有自己独有的方法...继承方面的问题...
解决方案十:
第三个问题...焦点就是鼠标停留的位子我是这么理解的....相关方面的有焦点事件.获取焦点事件...
解决方案十一:
你在类调用地方法地时候可以不用对象.方法名,不管是继承地方法和自己定义地,只是这样会很模糊,不清楚方法是谁地,所以都是默认用对象.方法名!
解决方案十二:
heihei
解决方案十三:
上面几位说的都挺明白的了。