JavaSwing 事件處理

leungqingyun發表於2024-12-03

1. 事件型別

2. ActionListener

a:如果同一個元件新增了多個監聽器,則每個監聽器都會被執行, 後新增監聽器會先被執行!

b: 同一個監聽器物件,可以監聽多個元件!

try
        {
            BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
            org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
            
        }
        catch(Exception e)
        {
            //TODO exception
        }
        
        // 建立窗體物件
        JFrame jFrame =new JFrame();
        // 設定窗體大小
        jFrame.setSize(800, 500);
        // 設定窗體全屏展示
        //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        // 設定窗體顯示位置
        //jFrame.setLocation(100,200);
        // 設定窗體顯示正中間
        jFrame.setLocationRelativeTo(null);
        // 設定窗體標題
        jFrame.setTitle("窗體標題");
        // 設定窗體不可全屏顯示
        //jFrame.setResizable(false);
        // 設定窗體關閉後退出程式
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //設定此視窗是否應該始終位於其他視窗上方
        jFrame.setAlwaysOnTop(true);
        // 設定窗體圖示
        jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage());
        
        
        
        
        // 建立容器
        JPanel jPanel =new JPanel();
                        
        JButton btn01 =new JButton("Button01");
        
        //給元件新增監聽器
        btn01.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("actionlistener");
                
            }
        });
        

        jPanel.add(btn01,"b1");
        
        jFrame.setContentPane(jPanel);

        
        // 設定窗體可見
        jFrame.setVisible(true);

3. 監聽器多種實現方式

try
        {
            BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
            org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
            
        }
        catch(Exception e)
        {
            //TODO exception
        }
        
        // 建立窗體物件
        JFrame jFrame =new JFrame();
        // 設定窗體大小
        jFrame.setSize(800, 500);
        // 設定窗體全屏展示
        //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        // 設定窗體顯示位置
        //jFrame.setLocation(100,200);
        // 設定窗體顯示正中間
        jFrame.setLocationRelativeTo(null);
        // 設定窗體標題
        jFrame.setTitle("窗體標題");
        // 設定窗體不可全屏顯示
        //jFrame.setResizable(false);
        // 設定窗體關閉後退出程式
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //設定此視窗是否應該始終位於其他視窗上方
        jFrame.setAlwaysOnTop(true);
        // 設定窗體圖示
        jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage());
        
        
        
        
        // 建立容器
        JPanel jPanel =new JPanel();
                        
        JButton btn01 =new JButton("Button01");
        JButton btn02 =new JButton("Button02");
        
        // 建立內部類來實現監聽器物件共享
        class ActionListenerImpl  implements ActionListener{
            int count;
            int num;
            ActionListenerImpl(int num){
                this.num=num;
            }
            @Override
            public void actionPerformed(ActionEvent e) {
                ++count;
                System.out.println("button"+num+"被點選了"+count);
                
            }
            
        }
        
        btn01.addActionListener(new ActionListenerImpl(1));
        btn02.addActionListener(new ActionListenerImpl(2));
        
        
        jPanel.add(btn01,"b1");
        jPanel.add(btn02,"b2");
        
        jFrame.setContentPane(jPanel);

        
        // 設定窗體可見
        jFrame.setVisible(true);

4.

5.

6.

7.

相關文章