//Titel:            Dialog-Fenster
//Version:
//Copyright:		Copyright (c) 2010
//Autor:
//Organisation:
//Beschreibung:


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

// fuer Glasspane
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import javax.swing.event.MouseInputAdapter;


public class glaspane_bsp2 extends JFrame {


  MyGlassPane2 myGlassPane ;
  JCheckBox BnchangeVisible;


  private JPanel jpanel;


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

  private ImageIcon loadIcon(String name, String description) {
   	// String path = "images" + name;
   	String path = name;  // Hier eventuell den path eintragen
    return new ImageIcon(path, description);
  }



  private void setGUI() {
    setSize(400, 430);
    setTitle("JFrame als Dialog");

    BnchangeVisible  = new JCheckBox("Glass pane \"visible\"");
    BnchangeVisible.setSelected(false);

    this.getContentPane().setLayout( new BorderLayout() );
    JLabel mainlabel= new JLabel();
    this.getContentPane().add(mainlabel, BorderLayout.CENTER);
    mainlabel.setIcon( loadIcon("BigTiger.gif","collie") );

    jpanel = new JPanel();
    // jpanel.setBackground(Color.green);
    jpanel.add(mainlabel,BorderLayout.CENTER);

    this.getContentPane().add( jpanel, BorderLayout.CENTER);

	JPanel pnButton = new JPanel();
	//pnButton.setBackground(Color.red);
	pnButton.setLayout( new FlowLayout() );
	pnButton.add(BnchangeVisible);
    this.getContentPane().add( pnButton, BorderLayout.SOUTH);

    //Set up the menu bar, which appears above the content pane.
    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("Menu");
    menu.add(new JMenuItem("Do nothing"));
    menuBar.add(menu);
//    this.setJMenuBar(menuBar);

        //Set up the glass pane, which appears over both menu bar
        //and content pane and is an item listener on the change
        //button.
    myGlassPane = new MyGlassPane2(BnchangeVisible, null,  this.getContentPane());
    BnchangeVisible.addItemListener(myGlassPane);
    this.setGlassPane(myGlassPane);

  } // setGUI

    private void BnOk_Click() {
        System.out.println("Hier in Ok");
    }

    private void BnEsc_Click() {
        setVisible(false);
        System.exit(0);
    }







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

}  // glaspane_bsp2


class MyGlassPane2 extends JPanel implements ItemListener {
    Point point;

    public MyGlassPane2(AbstractButton aButton,
                       JMenuBar menuBar,
                       Container contentPane) {
    System.out.println("glass");
       /* CBListener listener = new CBListener(aButton, menuBar,
                                             this, contentPane);
        addMouseListener(listener);
        addMouseMotionListener(listener);
*/
      setGUI();
    }

    private void setGUI() {
      this.setLayout( null );
      JPanel jpanel1 = new JPanel();
      jpanel1.setBackground(Color.green);
      jpanel1.setBounds(40, 30, 100, 30); // x/y   width height
      this.add( jpanel1);

      JPanel jpanel2 = new JPanel();
      jpanel2.setBackground(Color.red);
      jpanel2.setBounds(40, 90, 100, 30); // x/y   width height
      this.add( jpanel2);

      JPanel jpanel3 = new JPanel();
      jpanel3.setBackground(Color.blue);
      jpanel3.setBounds(140, 30, 30, 90); // x/y   width height
      this.add( jpanel3);
    }

    //React to change button clicks.
    public void itemStateChanged(ItemEvent e) {
        setVisible(e.getStateChange() == ItemEvent.SELECTED);
    }

    protected void paintComponent(Graphics g) {
        if (point != null) {
            g.setColor(Color.red);
            g.fillOval(point.x - 10, point.y - 10, 20, 20);
        }
    }

    public void setPoint(Point p) {
        point = p;
    }

}


/**
 * Listen for all events that our check box is likely to be
 * interested in.  Redispatch them to the check box.
 */
class CBListener extends MouseInputAdapter {
    Toolkit toolkit;
    Component liveButton;
    JMenuBar menuBar;
    int menuBarHoehe;
    MyGlassPane glassPane;
    Container contentPane;

    public CBListener(Component liveButton, JMenuBar menuBar,
                      MyGlassPane glassPane, Container contentPane) {
        toolkit = Toolkit.getDefaultToolkit();
        this.liveButton = liveButton;
        this.menuBar = menuBar;
        if (menuBar==null)
          menuBarHoehe=0;
        else
          menuBarHoehe=menuBar.getHeight();

        this.glassPane = glassPane;
        this.contentPane = contentPane;
    }

    public void mouseMoved(MouseEvent e) {
        redispatchMouseEvent(e, false);
    }

    public void mouseDragged(MouseEvent e) {
        redispatchMouseEvent(e, false);
    }

    public void mouseClicked(MouseEvent e) {
        redispatchMouseEvent(e, false);
    }

    public void mouseEntered(MouseEvent e) {
        redispatchMouseEvent(e, false);
    }

    public void mouseExited(MouseEvent e) {
        redispatchMouseEvent(e, false);
    }

    public void mousePressed(MouseEvent e) {
        redispatchMouseEvent(e, false);
    }

    public void mouseReleased(MouseEvent e) {
        redispatchMouseEvent(e, true);
    }

    //A basic implementation of redispatching events.
    private void redispatchMouseEvent(MouseEvent e,
                                      boolean repaint) {
        Point glassPanePoint = e.getPoint();
        Container container = contentPane;
        Point containerPoint = SwingUtilities.convertPoint(
                                        glassPane,
                                        glassPanePoint,
                                        contentPane);
        if (containerPoint.y < 0) { //we're not in the content pane
            if (containerPoint.y + menuBarHoehe >= 0) { 
                //The mouse event is over the menu bar.
                //Could handle specially.
            } else { 
                //The mouse event is over non-system window 
                //decorations, such as the ones provided by
                //the Java look and feel.
                //Could handle specially.
            }
        } else {
            //The mouse event is probably over the content pane.
            //Find out exactly which component it's over.  
            Component component = 
                SwingUtilities.getDeepestComponentAt(
                                        container,
                                        containerPoint.x,
                                        containerPoint.y);
                            
            if ((component != null) 
                && (component.equals(liveButton))) {
                //Forward events over the check box.
                Point componentPoint = SwingUtilities.convertPoint(
                                            glassPane,
                                            glassPanePoint,
                                            component);
                component.dispatchEvent(new MouseEvent(component,
                                                     e.getID(),
                                                     e.getWhen(),
                                                     e.getModifiers(),
                                                     componentPoint.x,
                                                     componentPoint.y,
                                                     e.getClickCount(),
                                                     e.isPopupTrigger()));
            }
        }
        
        //Update the glass pane if requested.
        if (repaint) {
            glassPane.setPoint(glassPanePoint);
            glassPane.repaint();
        }
    }
}
