События вызова на каркасе из группы

Компонент на панели можно быстро вызывать события на родителей Frame. Таким образом, мы можем поместить всю логику в одном месте. В этом примере фрейм содержит кнопки 1 и 2 группы с пуговицами. Первый кнопки на панели будет генерировать событие для кнопки на корпусе, а вторая кнопка панели вызовет просьбой закрыть рамы и приложений.


[TestEventPanel.java]



import java.awt.*;

import java.awt.event.*;



public class TestEventPanel extends Panel {

  Button b1,b2;

 

  TestEventPanel(){

    super();

    setLayout(new FlowLayout());

    setBackground(new Color(0).black);

    b1 = new Button("call event on the frame");

    add(b1);

    b2 = new Button("close the parent frame");

    add(b2);

    }

}

Frame после добавления группы, будет действовать как ActionListener событий на 2 кнопки управления.


[TestEventFrame.java]

        

import java.awt.*;

import java.awt.event.*;



public class TestEventFrame extends Frame implements

        ActionListener, WindowListener  {

    TestEventPanel p1;

    Button b1;

    

    TestEventFrame(String title){

        super(title);

        setLayout(new FlowLayout());

        p1 = new TestEventPanel();

        

        b1 = new Button("A dummy button");

        add(b1);

        

        // the Panel with 2 buttons on it

        add(p1);

        createFrame();

        

        

        // add the actionlistener

        b1.addActionListener(this);

        p1.b1.addActionListener(this);

        p1.b2.addActionListener(this);

        addWindowListener(this);

    }

    

    void createFrame() {

        Dimension d = getToolkit().getScreenSize();

        setLocation(d.width/4,d.height/3);

        setSize(400,100);

        setVisible(true);

    }

    

    public void actionPerformed(ActionEvent ae){

        

        if (ae.getSource()==p1.b1) {

            System.out.println(ae.getActionCommand());

            ActionEvent new_ae =

                    new ActionEvent(b1,

                    ActionEvent.ACTION_PERFORMED,

                    "Panel b1 is calling the dummy button");

            b1.dispatchEvent(new_ae);

        }

        

        if (ae.getSource()==b1) {

            System.out.println("dummy receive :" + ae.getActionCommand());

        }

        

        if (ae.getSource()==p1.b2) {

            System.out.println(ae.getActionCommand());

            processEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

        }

        

    }

    

    public void windowClosing(WindowEvent e) {

        this.dispose();

        System.exit(0);

    }

    public void windowActivated(WindowEvent e) { }

    public void windowDeactivated(WindowEvent e) { }

    public void windowDeiconified(WindowEvent e) { }

    public void windowClosed(WindowEvent e) { }

    public void windowIconified(WindowEvent e) { }

    public void windowOpened(WindowEvent e) { }

}

И, наконец:




[TestEventApplet.java]

        

import java.awt.*;



public class TestEventApplet extends java.applet.Applet {

    TestEventFrame myTestEventFrame;

    

    public void init() {

        myTestEventFrame =

                new TestEventFrame("TestEvent Frame");

    }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>