java基础 ---Swing事件编程
GUI的设计就剩个菜单组建,这个组件也是想当于容器套容器,在设计方面没有什么难度,主要是一些事件的响应。还有另一种事件的监听方式,也就是适配器监听方法。
1、菜单要设计一个菜单那么有三大组件是不可或缺的。即JMenuBar、JMenu、JmenuItem。(1)JMenuBar组件的功能是用来摆入JMenu组件.当我们建立完许多的JMenu组件后,需要通过JMenuBar组件来将JMenu组件加入到窗口中.虽然我们由下表中看出JMenuBar组件只有一种构造方式,但是它对于构造一个菜单来说是个不可缺少的组件.JMenuBar构造函数:JMenuBar():建立一个新的JMenuBar; 由于构造一个空的JMenuBar然后设置到窗口上对于窗口来说是没有意义的,因此JMenuBar需要结合至少一个以上的JMenu组件才会在画面上显现出视觉的效果。
(2)JMenu组件是用来存放和整合JMenuItem的组件,这个组件也是在构成一个菜单中不可或缺的组件之一.JMenu可以是单一层次的结构也可以是一个层次式的结构,要使用何种形式的结构取决于界面设计上的需要而定。
(3)JMenuItem继承AbstractButton类,因此JMenuItem具有许多AbstractButton的特性,也可以说JMenuItem是一种特殊的Button,所以JMenuItem支持许多在Button中好用的功能,例如加入图标文件或是当我们在菜单中选择某一项JMenuItem时就如同按下按钮的操作一样触发ActionEvent,通过ActionEvent的机制我们就能针对不同的JMenuItem编写其对应的程序区段。
2、Adapter事件监听适配器与标准事件处理的区别在于如果使用标准事件处理当该监听器方法不只一个的时候,也需要把其中所有的方法都覆盖进程序代码中,即使某些方法不需要使用。如果使用适配器可以只需要将用到的方法写进代码即可。下面建立一个监听事件的类,当window被关闭时则会响应该时间。class WindowProc extends WindowAdapter{ public void windowClosing(WindowEvent e) { ...... }}
4、JavaBean 模式今天的课堂作业就是对JavaBean这个种设计模式的应用,有些同学认为使用这种模式反而使程序更加烦琐,不易理解。其实不然,虽然我们可以使用其他方式来完成今天这个作业,也许更简单,但是javaBean是种设计理念,我们常说的MVC方式,javabean就是简单的体现者。
我们这个程序建立了四个类:分别是StudentMain(界面和响应事件的类)StudentScore(数据保存类)Compute(计算总分和平均分的类)Results(保存计算结果的类)。其中StudentScore和Results就是标准的JavaBean类。他们只有get和set方法,用于其他类对他们进行数据的读取和存储。
这里要注意一点,当我们使用JavaBean模式的时候,那么一定要传递一个该对象的引用以保持他们传递数据的一致性。什么意思呢,打个比方,现在我要在TestPass这个类里面调用Bean的一个set方法保存一个数据,并在TestPass1这个类里面获得该数据并加以计算。那么我们应该这么做:public class TestPass{ int a = 1; //初始化a的值为1 public TestPass(){ test(); } public void test(){ TestPass1 tp1 = new TestPass1();//创建TestPass1类的对象 Bean bean = new Bean(); //创建javabean类的对象 bean.set(a); //将a属性的值传递给javabean tp1.change(bean); //调用TestPass类的方法进行数据操作,传 //递当前bean对象给该方法 System.out.println(bean.get()); //取得javabean里的值并输出 } public static void main(String [] args){ new TestPass(); }}
class TestPass1{ public void change(Bean bean){ bean.set(bean.get()+10); //获得传递过来对象的属性,该对象是 //javabean类的实例,通过计算后将值 //通过set方法传递回javabean }}
class Bean{ //标准javaBean模式,通过set和get方法接收 //和传递数据,在两个类中起到中间件作用 int a1; public void set(int a){ a1 = a; } public int get(){ return a1; }
}