package javacodebook.gui.change;

import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.awt.*;

/**
 * @author Benjamin Rusch
 *
 * Bei Swing kann bei vielen Komponenten die Gestalt durch Methodenaufrufe
 * sehr einfach geändert werden.
 */

public class ChangedComponentsJFrame  extends JFrame {


    private JButton normalButton = new JButton("Normaler Button");
    private JButton imageButton = new JButton();
	private JButton etchedBorderedButton = new JButton ("Beschrifteter Rand") ;
	private JButton loweredBorderedButton = new JButton ("Abgesenkte Ränder") ;
	private JButton raisedBorderedButton = new JButton ("Herausstehende Ränder") ;
	private JButton coloredBorderedButton = new JButton ("Farbige Ränder");
	private JLabel changedLabel = new JLabel();

    private Container content = null;

    /**
     *	Konstruktor von ChangedComponentsJFrame.
     */
    public ChangedComponentsJFrame(String title) {

		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		content = this.getContentPane();
		content.setLayout(new FlowLayout());

		// Normaler Button
		content.add(normalButton);

		// durch setIcon(), lässt sich sehr einfach ein Bild auf einen Button
		// platzieren.
        imageButton.setIcon(new ImageIcon(getClass().getClassLoader().
        		getSystemResource("javacodebook/gui/change"
        		+"/logo.gif")));

		// Will man, dass beim Button-Klick ein anderes Bild erscheint,
		// verwendet man setPressedIcon()
		imageButton.setPressedIcon(new ImageIcon(getClass().getClassLoader().
				getSystemResource("javacodebook/gui/change"
				+"/logo2.gif")));

 		// Komponenten im Focus benutzen eine Umrandung, kann
 		// ausgeschaltet werden
 		imageButton.setFocusPainted(false);

 		// Per Default ist auch ein Button mit Image umrandet
 		// kann wie folgt ausgeschaltet werden
		imageButton.setBorderPainted(false);

 		// Soll der Hintergrund transparent sein muss setContentAreaFilled(false)
 		// gesetzt werden
 		imageButton.setContentAreaFilled(false);

 		// Soll der klickbare Bereich des Buttons wirklich nur aus dem Icon
 		// bestehen, und nicht darüberhinaus, muss folgendes gesetzt werden
		imageButton.setMargin(new Insets(0,0,0,0));

		content.add(imageButton);

		// Unterschiedlich Ränder von Buttons können wie folgt gestzt werden
		etchedBorderedButton.setBorder(BorderFactory.createTitledBorder("Rand"));
		content.add(etchedBorderedButton);

		loweredBorderedButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
		content.add(loweredBorderedButton);

		raisedBorderedButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
		content.add( raisedBorderedButton );

		coloredBorderedButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED,
				Color.blue,Color.cyan));
		content.add(coloredBorderedButton);

		// Ein Label kann wie ein Button auf ähnliche Weise verändert werden
		changedLabel.setIcon(new ImageIcon(getClass().getClassLoader().
				getSystemResource("javacodebook/gui/change/logo.gif")));
		changedLabel.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.green));
		content.add(changedLabel);


    }


}