Swing触发事件的3种方法

来源:互联网 发布:设计展板用什么软件 编辑:程序博客网 时间:2024/04/29 13:28
/** * 方法1 * 利用一个ActionListener来监听事件源产生的事件 * 用多个if来判断事件源 */import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.*;import javax.swing.*;public class M5{JFrame frame = new JFrame();JPanel jp1, jp2, jp3;//3个面板JLabel jlb1,jlb2;//两个标签JButton jb1,jb2;//两个按钮JTextField jtf1;//输入文本框JPasswordField jpf1;//输入密码框public static void main(String[] args) {// TODO 自动生成的方法存根new M5();}public M5(){//实例组件jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jlb1 = new JLabel("用户名");jlb2 = new JLabel("密码");jb1 = new JButton("登入");jb2 = new JButton("取消");jtf1 = new JTextField(10);jpf1 = new JPasswordField(10);//设置成网格布局frame.setLayout(new GridLayout(3,1));//加入组件jp1.add(jlb1);jp1.add(jtf1);jp2.add(jlb2);jp2.add(jpf1);jp3.add(jb1);jp3.add(jb2);frame.add(jp1);frame.add(jp2);frame.add(jp3);DemoListener myListener = new DemoListener();//创建监听对象        jb1.addActionListener(myListener);         jb2.addActionListener(myListener);              frame.setTitle("标题");        frame.setSize(300, 150);        frame.setLocation(200,200);//显示窗口true        frame.setVisible(true);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}private class DemoListener implements ActionListener{public void actionPerformed(ActionEvent e){String name = e.getActionCommand();    if (name.equals("登入"))             JOptionPane.showMessageDialog(frame,                                         "登入");         else if (name.equals("取消"))             JOptionPane.showMessageDialog(frame,                                         "取消");}}}


/** * 使用匿名内部类,虽然不用if判断事件源是是谁,但代码可读性差,都集中在了一起 */import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.*;import javax.swing.*;public class M2{JFrame frame = new JFrame();JPanel jp1, jp2, jp3;//3个面板JLabel jlb1,jlb2;//两个标签JButton jb1,jb2;//两个按钮JTextField jtf1;//输入文本框JPasswordField jpf1;//输入密码框public static void main(String[] args) {// TODO 自动生成的方法存根new M2();}public M2(){//实例组件jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jlb1 = new JLabel("用户名");jlb2 = new JLabel("密码");jb1 = new JButton("登入");jb2 = new JButton("取消");jtf1 = new JTextField(10);jpf1 = new JPasswordField(10);//设置成网格布局frame.setLayout(new GridLayout(3,1));//加入组件jp1.add(jlb1);jp1.add(jtf1);jp2.add(jlb2);jp2.add(jpf1);jp3.add(jb1);jp3.add(jb2);frame.add(jp1);frame.add(jp2);frame.add(jp3);        jb1.addActionListener(                 new ActionListener()                 {                     public void actionPerformed(ActionEvent e)                     {                         JOptionPane.showMessageDialog(frame,                                                "登入");                     }                 }             );             jb2.addActionListener(                 new ActionListener()                 {                     public void actionPerformed(ActionEvent e)                     {                         JOptionPane.showMessageDialog(frame,                                                 "取消");                     }                 }             );         frame.setTitle("标题");        frame.setSize(300, 150);        frame.setLocation(250,250);//显示窗口true        frame.setVisible(true);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}


/** * 避免方法2的混乱 */import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.*;import javax.swing.*;public class M3{JFrame frame = new JFrame();JPanel jp1, jp2, jp3;//3个面板JLabel jlb1,jlb2;//两个标签JButton jb1,jb2;//两个按钮JTextField jtf1;//输入文本框JPasswordField jpf1;//输入密码框public static void main(String[] args) {// TODO 自动生成的方法存根new M3();}public M3(){//实例组件jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jlb1 = new JLabel("用户名");jlb2 = new JLabel("密码");jb1 = new JButton("登入");jb2 = new JButton("取消");jtf1 = new JTextField(10);jpf1 = new JPasswordField(10);//设置成网格布局frame.setLayout(new GridLayout(3,1));//加入组件jp1.add(jlb1);jp1.add(jtf1);jp2.add(jlb2);jp2.add(jpf1);jp3.add(jb1);jp3.add(jb2);frame.add(jp1);frame.add(jp2);frame.add(jp3);jb1.addActionListener(new Button1Handler());jb2.addActionListener(new Button1Handler());        frame.setTitle("标题");        frame.setSize(300, 150);        frame.setLocation(250,250);//显示窗口true        frame.setVisible(true);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}   private class Button1Handler implements ActionListener      {          public void actionPerformed(ActionEvent e)          {              JOptionPane.showMessageDialog(frame,                                           "按钮1 被点击");          }      }           private class Button2Handler implements ActionListener      {          public void actionPerformed(ActionEvent e)          {              JOptionPane.showMessageDialog(frame,                                           "按钮2 被点击");          }      } }


0 0