//Titel:	Dialog-Fenster mit Action-Listener
//Version:	1.0
//Copyright:	(c) 2011, 25.10.2011 
//Autor:	by M. Wilhelm
//Organisation:	HS-Harz
//Beschreibung:	Zeigt die Struktur eines Action-Listener


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

import java.util.Vector;

// implements IActionListener erwartet die Methode onClick
// wird zentral von allen Schaltern, Menues aufgerufen

public class Action7 extends JFrame implements IActionListener {

   // Die Schalter simulieren die Clicks
  JButton BnInit = new JButton("Init");
  JButton BnClick1 = new JButton("Click1");
  JButton BnClick2 = new JButton("Click2");
  JButton BnClick3 = new JButton("Click3");

   // die eigentliches Schalter
  CButton cBn1 = new CButton("Bn1");
  CButton cBn2 = new CButton("Bn2");
  CButton cBn3 = new CButton("Bn3");

  public Action7() {
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    setGUI();
  }

  private void setGUI() {
    setSize(400, 230);
    setLocation(400,30);
    setTitle("JFrame als Dialog");

    BnInit.setFont( new Font("Arial", Font.BOLD,18)  );
    BnClick1.setFont( new Font("Arial", Font.BOLD,18)  );
    BnClick2.setFont( new Font("Arial", Font.BOLD,18)  );
    BnClick3.setFont( new Font("Arial", Font.BOLD,18)  );


	JPanel pnButton = new JPanel();
	//pnButton.setBackground(Color.red);
	pnButton.setLayout( new FlowLayout() );
	pnButton.add(BnInit);
     pnButton.add(BnClick1);
     pnButton.add(BnClick2);
	pnButton.add(BnClick3);

    this.getContentPane().add( pnButton, BorderLayout.SOUTH );

   BnInit.addActionListener(new java.awt.event.ActionListener() {
       public void actionPerformed(ActionEvent e) {
         BnInit_Click();
     }
    });
   BnClick1.addActionListener(new java.awt.event.ActionListener() {
       public void actionPerformed(ActionEvent e) {
         BnClick_Click(1);
     }
    });
   BnClick2.addActionListener(new java.awt.event.ActionListener() {
       public void actionPerformed(ActionEvent e) {
         BnClick_Click(2);
     }
    });
   BnClick3.addActionListener(new java.awt.event.ActionListener() {
       public void actionPerformed(ActionEvent e) {
         BnClick_Click(3);
     }
    });


  } // setGUI

   // registrierung
  private void BnInit_Click() {
   cBn1.addListener(this);
   cBn2.addListener(this);
   cBn3.addListener(this);
  }

   // jetzt wird "manuell" geklickt
  private void BnClick_Click(int nr) {
    switch (nr) {
      case 1: cBn1.WurdeAngeklickt();
              break;
      case 2: cBn2.WurdeAngeklickt();
              break;
      case 3: cBn3.WurdeAngeklickt();
              break;
      default: System.out.println("Fehlerhafte Case-Anweisung: "+nr); 
    }
  }

   // hier die gemeinsame Click-Methode
  public void onClick(CButton button) {
     System.out.println("Hier onClick");
     if (button == Bn1) System.out.println("Bn1 Click");
     if (button == Bn2) System.out.println("Bn2 Click");
     if (button == Bn3) System.out.println("Bn3 Click");
  }



  public static void main(String[] args) {
    Action7 frame = new Action7();
    frame.setVisible(true);
 }

}  // Action6


interface IActionListener {
  public void onClick(CButton button);
}



// "GUI"-Klasse zur Simulation eines Schalters
class CButton {
   String sLabel;
   Vector <IActionListener> liste;

   public CButton (String sLabel){
     this.sLabel = sLabel;
     liste = new Vector<IActionListener>(); 
   }

   public void addListener(IActionListener caller) {
      System.out.println("Methode addListener");
     liste.add(caller);
   }

   public void WurdeAngeklickt() {
     for (int i=0; i<liste.size(); i++) {
       //IActionListener caller = (IActionListener)liste.get(i);
       //caller.onClick(this);

       liste.get(i).onClick(this);
     }
     for (IActionListener caller:liste){
      caller.onClick(this);
     }
   }

}  // CButton
