package javacodebook.gui.radio;

import javax.swing.*;
import javax.swing.event.*;

import java.awt.event.*;
import java.awt.*;

/**
 * @author Benjamin Rusch
 *
 * Fenster mit Checkboxen und RadioButtons.
 */

public class RadioJFrame  extends JFrame {

	private JCheckBox milk = null;
    private JCheckBox sugar = null;

	private ButtonGroup group = new ButtonGroup();
    private JRadioButton male = null;
    private JRadioButton female = null;
	
    private Container content = null;

    /**
     *	Konstruktor von RadioJFrame.
     */
    public RadioJFrame(String title) {

		super(title);
		
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
	    
		content = this.getContentPane();
		content.setLayout(new FlowLayout());
	
		buildCheckbox();
		buildRadiobuttons();

    }

    /**
     * Zwei Checkboxes werden gebaut und aufs Frame gelegt
     */
    private void buildCheckbox() {
		// Beschriftung der Checkbox wird im Konstruktor übernommen
		milk = new JCheckBox("Milch");
		sugar = new JCheckBox("Zucker");
		
		// Komponenten werden auf die ContentPane platziert
		content.add(milk);
		content.add(sugar);
		
		/*
		// optional könnte man auch die Checkboxen gruppieren, so dass immer 
		// nur eine Checkbox markiert sein darf
		ButtonGroup cgroup = new ButtonGroup();
		cgroup.add(milk);
		cgroup.add(sugar);
		*/
		
		// Will man das Event beim Statuswechsel abfangen, kann man den 
		// ActionListener verwenden 
		sugar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					if(sugar.isSelected())
						System.out.println("Mit Zucker");
					else
						System.out.println("Doch kein Zucker");
				}

		});
		
		milk.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					if(milk.isSelected())
						System.out.println("Mit Milch");
					else
						System.out.println("Doch keine Milch");
				}

		});
				
		// Ändert den Status ohne ein Event auszulösen
		sugar.setSelected(true);
		
		// Ändert den Status, und löst dabei ein Event aus
		milk.doClick();
    }

    /**
     * Zwei Radiobuttons werden gebaut und aufs Frame gelegt
     */
    private void buildRadiobuttons() {
		
		// Beschriftung der RadioButtons wird im Konstruktor vorgenommen
		male = new JRadioButton("männlich");
		female = new JRadioButton("weiblich");
		
		// Komponenten werden auf die ContentPane platziert
		content.add(male);
		content.add(female);
		
		// die Komponenten werden, neben der physikalischen Platzierung 
		// auf dem Container, auch logisch einer Gruppe zugeordnet.
		// Entweder der male oder der female Button kann angeklickt sein
		// nie beide zugleich
		group.add(male);
		group.add(female);
    }

}