import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class JSwingBeispiel extends JFrame implements ActionListener
{

	// die Steuerlemente des Programms:
	// ohne Hilfselemente (JLabel, JPanel etc.)

	// Schaltflächen & Eingabefelder
	JButton derSwingButton1, derSwingButton2;
	JCheckBox Kreuzel;
	JPasswordField dasPasswort;
	JRadioButton RadioJava, RadioWindows, RadioMotif;
	ButtonGroup dieUIGruppe;
	JToolBar dieLeiste;

	// Rollbalken, Slider, Fortschrittsbalken
	JProgressBar derBalken;
	JScrollBar derRollBalken;
	JSlider derRegler;

	// verschiedne Fenstertypen
	JSplitPane derSplitter;
	JTabbedPane dieReiter;

	// Listen
	JComboBox dieComboBox;
	JList dieListe;

	// Tabellen und Bäume
	JTable dieTabelle;
	JTree derBaum;

	public static void main(String[] args)
	{
		new JSwingBeispiel();
	}

	public JSwingBeispiel()
	{
		
		setSize(800, 600);
		setTitle("Übersicht der Swing-Elemente");
		
		// Layoutmanager erzeugen und zuordnen
		GridBagLayout dasLayout = new GridBagLayout();
		GridBagConstraints dieLayoutWerte = new GridBagConstraints();

		dieLayoutWerte.fill = GridBagConstraints.BOTH;
		dieLayoutWerte.weightx = 1;
		dieLayoutWerte.weighty = 1;
		dieLayoutWerte.anchor = GridBagConstraints.NORTHWEST;
		getContentPane().setLayout(dasLayout);

		// Steuerelemente erzeugen und zuordnen
		derSwingButton1 = new JButton("Schaltfläche 1");
		derSwingButton1.setToolTipText("JButton: Schaltfläche 1");
		derSwingButton1.registerKeyboardAction(this, "Beenden", KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.ALT_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW);
		
		derSwingButton2 = new JButton("Schaltfläche 2");
		derSwingButton2.setToolTipText("JButton: Schaltfläche 2");
		
		dieLeiste = new JToolBar();
		dieLeiste.setPreferredSize(new Dimension(133,66));
		dieLeiste.add(derSwingButton1);
		dieLeiste.add(derSwingButton2);
		dieLeiste.setToolTipText("JToolBar: Werkzeugleiste");
		dieLeiste.setBorder(BorderFactory.createTitledBorder("JToolBar: Werkzeugleisteleiste mit Schaltflächen (JButton)"));

		dieLayoutWerte.gridwidth = 1;
		dieLayoutWerte.gridheight = 1;
		dieLayoutWerte.gridx = 0;
		dieLayoutWerte.gridy = 0;
		dasLayout.setConstraints(dieLeiste, dieLayoutWerte);
		getContentPane().add(dieLeiste);
		dieUIGruppe = new ButtonGroup();
		
		JPanel RadioPanel = new JPanel();
		RadioPanel.setLayout(new GridLayout(3,1));
		RadioJava = new JRadioButton("Java Look and Feel", true);
		RadioJava.setActionCommand("Java");
		RadioJava.addActionListener(this);
		RadioPanel.add(RadioJava);
		dieUIGruppe.add(RadioJava);
		
		RadioWindows = new JRadioButton("Windows Look and Feel", false);
		RadioWindows.setActionCommand("Windows");
		RadioWindows.addActionListener(this);
		RadioPanel.add(RadioWindows);
		dieUIGruppe.add(RadioWindows);
		
		RadioMotif = new JRadioButton("Motif Look and Feel", false);
		RadioMotif.setActionCommand("Motif");
		RadioMotif.addActionListener(this);
		RadioPanel.add(RadioMotif);
		dieUIGruppe.add(RadioMotif);
		
		RadioPanel.setBorder(BorderFactory.createTitledBorder("JRadioButton: Radiobuttons als Gruppe"));
		RadioPanel.setToolTipText("JRadioButton: Auswahlschalter");
		dieLayoutWerte.gridwidth = 1;
		dieLayoutWerte.gridheight = 3;
		dieLayoutWerte.gridx = 0;
		dieLayoutWerte.gridy = 1;
		dasLayout.setConstraints(RadioPanel, dieLayoutWerte);
		getContentPane().add(RadioPanel);
		
		Kreuzel = new JCheckBox("bereits angekreuzt", true);
		Kreuzel.setToolTipText("JCheckBox: Checkbox");
		Kreuzel.setBorder(BorderFactory.createTitledBorder("JCheckBox: einfache Checkbox"));
		
		JPanel CheckPanel = new JPanel();
		CheckPanel.add(Kreuzel);
		CheckPanel.setBorder(BorderFactory.createTitledBorder("JRadioButton: Radiobuttons als Gruppe"));
		dieLayoutWerte.gridwidth = 1;
		dieLayoutWerte.gridheight = 1;
		dieLayoutWerte.gridx = 0;
		dieLayoutWerte.gridy = 4;
		dasLayout.setConstraints(CheckPanel, dieLayoutWerte);
		getContentPane().add(CheckPanel);
		
		derBalken = new JProgressBar();
		derBalken.setOrientation(JProgressBar.HORIZONTAL);
		derBalken.setMaximum(100);
		derBalken.setMinimum(1);
		derBalken.setValue(33);
		derBalken.setToolTipText("JProgressBar: Fortschrittsbalken");
		derBalken.setBorder(BorderFactory.createTitledBorder("JProgressBar: Fortschrittsbalken"));
		dieLayoutWerte.gridwidth = 1;
		dieLayoutWerte.gridheight = 1;
		dieLayoutWerte.gridx = 1;
		dieLayoutWerte.gridy = 0;
		dasLayout.setConstraints(derBalken, dieLayoutWerte);
		getContentPane().add(derBalken);
		
		derRollBalken = new JScrollBar();
		derRollBalken.setOrientation(JProgressBar.HORIZONTAL);
		derRollBalken.setMaximum(100);
		derRollBalken.setMinimum(1);
		derRollBalken.setValue(33);
		derRollBalken.setPreferredSize(new Dimension(100, 25));
		derRollBalken.setToolTipText("JScrollBar: Rollbalken");
		derRollBalken.setBorder(BorderFactory.createTitledBorder("JScrollBar: ein Rollbalken"));
		dieLayoutWerte.gridx = 1;
		dieLayoutWerte.gridy = 1;
		dasLayout.setConstraints(derRollBalken, dieLayoutWerte);
		getContentPane().add(derRollBalken);
		
		derRegler = new JSlider();
		derRegler.setOrientation(JProgressBar.HORIZONTAL);
		derRegler.setMaximum(100);
		derRegler.setMinimum(1);
		derRegler.setValue(33);
		derRegler.createStandardLabels(10);
		derRegler.setPaintLabels(true);
		derRegler.setBorder(BorderFactory.createTitledBorder("JSlider - Stellregler"));
		derRegler.setToolTipText("JSlider: Stellregler");
		derRegler.setBorder(BorderFactory.createTitledBorder("JSlider: ein Stellregler"));
		dieLayoutWerte.gridx = 1;
		dieLayoutWerte.gridy = 2;
		dasLayout.setConstraints(derRegler, dieLayoutWerte);
		getContentPane().add(derRegler);
		
		dasPasswort = new JPasswordField("test");
		dasPasswort.setToolTipText("JPasswordField: Paßworteingabefeld");
		dasPasswort.setBorder(BorderFactory.createTitledBorder("JPasswordField: Eingabefeld für Paßwörter"));
		dieLayoutWerte.gridx = 1;
		dieLayoutWerte.gridy = 3;
		dasLayout.setConstraints(dasPasswort, dieLayoutWerte);
		getContentPane().add(dasPasswort);
		
		Object[] InhaltderComboBox = {"Zeile 1", "Zeile 2", "Zeile 3", "Zeile 4", "Zeile 5"};
		dieComboBox = new JComboBox(InhaltderComboBox);
		dieComboBox.setEditable(true);
		dieComboBox.setPreferredSize(new Dimension (100, 30));
		dieComboBox.setSelectedItem(InhaltderComboBox[2]);
		dieComboBox.setToolTipText("JComboBox: Klappliste");
		dieComboBox.setBorder(BorderFactory.createTitledBorder("JComboBox: editierbare Klappliste"));
		dieLayoutWerte.gridx = 1;
		dieLayoutWerte.gridy = 4;
		dasLayout.setConstraints(dieComboBox, dieLayoutWerte);
		getContentPane().add(dieComboBox);
		
		DefaultMutableTreeNode WurzelKnoten	= new DefaultMutableTreeNode("Pakete");
		DefaultMutableTreeNode ElternKnoten = new DefaultMutableTreeNode("java");
		DefaultMutableTreeNode Knoten 		= new DefaultMutableTreeNode("awt");
		ElternKnoten.add(Knoten);
		Knoten 		= new DefaultMutableTreeNode("lang");
		ElternKnoten.add(Knoten);
		Knoten 		= new DefaultMutableTreeNode("io");
		ElternKnoten.add(Knoten);
		Knoten 		= new DefaultMutableTreeNode("net");
		ElternKnoten.add(Knoten);
		WurzelKnoten.add(ElternKnoten);

		ElternKnoten = new DefaultMutableTreeNode("javax");
		Knoten 		= new DefaultMutableTreeNode("swing");
		ElternKnoten.add(Knoten);
		Knoten 		= new DefaultMutableTreeNode("servlet");
		ElternKnoten.add(Knoten);
		WurzelKnoten.add(ElternKnoten);

		derBaum = new JTree(WurzelKnoten);
		derBaum.setPreferredSize(new Dimension(150, 200));
		derBaum.setToolTipText("JTree: Baum-/Outlinesicht");
		derBaum.setBorder(BorderFactory.createTitledBorder("JTree: expandierbarer Hierarchieviewer"));
		dieLayoutWerte.gridwidth = 1;
		dieLayoutWerte.gridheight = 5;
		dieLayoutWerte.gridx = 2;
		dieLayoutWerte.gridy = 0;
		dasLayout.setConstraints(derBaum, dieLayoutWerte);
		getContentPane().add(derBaum);
		
		JPanel	dieLinkeSeite = new JPanel();
		JPanel	dieRechteSeite = new JPanel();
		dieRechteSeite.setBackground(Color.lightGray);
		dieRechteSeite.add(new JLabel("rechts"));
		dieLinkeSeite.add(new JLabel("links"));
		derSplitter = new 	JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true, dieLinkeSeite, dieRechteSeite);
		derSplitter.setToolTipText("JSplitPane: \"Fensterteiler\"");
		derSplitter.setBorder(BorderFactory.createTitledBorder("JSlitPane: Splitter mit Textlabels"));
		dieLayoutWerte.gridwidth = 3;
		dieLayoutWerte.gridheight = 1;
		dieLayoutWerte.gridx = 0;
		dieLayoutWerte.gridy = 5;
		dasLayout.setConstraints(derSplitter, dieLayoutWerte);
		
		dieListe = new JList(InhaltderComboBox);
		dieListe.setVisibleRowCount(1);
		dieListe.setFixedCellHeight(15);
		dieListe.setSize(100, 30);
		dieListe.setToolTipText("JListe: einfache Liste");
		JScrollPane dieScrollFlaeche = new JScrollPane(dieListe);
		dieScrollFlaeche.setBorder(BorderFactory.createTitledBorder("JList: Liste (in einem JScrollPane)"));
				
		dieReiter = new JTabbedPane();
		dieReiter.setPreferredSize(new Dimension(200, 200));
		dieReiter.addTab("erster", dieScrollFlaeche);
		dieReiter.addTab("zweiter", null);
		dieReiter.addTab("dritter", null);
		dieReiter.addTab("vierter", null);
		dieReiter.setToolTipText("JTabbedPane: Registerkarten");
		dieReiter.setBorder(BorderFactory.createTitledBorder("JTabbedPane: Registerkarten"));
		dieLayoutWerte.gridwidth = 1;
		dieLayoutWerte.gridheight = 1;
		dieLayoutWerte.gridx = 0;
		dieLayoutWerte.gridy = 6;
		dasLayout.setConstraints(dieReiter, dieLayoutWerte);
		getContentPane().add(dieReiter);
		
		Object[][] TabellenInhalt =	{
			{"Zeile 1, ZelleA", "Zeile 1, ZelleB", "Zeile 1, ZelleC", "Zeile 1, ZelleD"},
			{"Zeile 2, ZelleA", "Zeile 2, ZelleB", "Zeile 2, ZelleC", "Zeile 2, ZelleD"},
			{"Zeile 3, ZelleA", "Zeile 3, ZelleB", "Zeile 3, ZelleC", "Zeile 3, ZelleD"},
			{"Zeile 4, ZelleA", "Zeile 4, ZelleB", "Zeile 4, ZelleC", "Zeile 4, ZelleD"},
			{"Zeile 5, ZelleA", "Zeile 5, ZelleB", "Zeile 5, ZelleC", "Zeile 5, ZelleD"},
		};
		Object[] SpaltenNamen = new Object[4];
		SpaltenNamen[0] = new String("Spalte 1");
		SpaltenNamen[1] = new String("Spalte 2");
		SpaltenNamen[2] = new String("Spalte 3");
		SpaltenNamen[3] = new String("Spalte 4");
		dieTabelle = new JTable(TabellenInhalt, SpaltenNamen);
		dieTabelle.setGridColor(Color.black);
		dieTabelle.setShowGrid(true);
		dieTabelle.setToolTipText("JTable: Tabelle");
		JPanel TabellenPanel = new JPanel();
		TabellenPanel.add(dieTabelle);
		TabellenPanel.setBorder(BorderFactory.createTitledBorder("JTable: beliebig konfigurierbare Tabellen"));

		dieLayoutWerte.gridwidth = 2;
		dieLayoutWerte.gridheight = 1;
		dieLayoutWerte.gridx = 1;
		dieLayoutWerte.gridy = 6;
		dasLayout.setConstraints(TabellenPanel, dieLayoutWerte);
		getContentPane().add(TabellenPanel);
		
		addWindowListener(
			new WindowAdapter() {
				public void windowClosing(WindowEvent e)
				{
					setVisible(false);	
					System.exit(0);	
				}
			}
		);
				
		setVisible(true);
	}

	// Implementierung des ActionListener
	public void actionPerformed(ActionEvent e)
	{
		String Befehl = new String(e.getActionCommand());
		try
		{
			if(Befehl.equals("Beenden"))
      		{
        		System.exit(0);
      		}
			if(Befehl.equals("Java"))
			{
				RadioMotif.setSelected(false);
				RadioWindows.setSelected(false);
				UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
				SwingUtilities.updateComponentTreeUI(this);
			}
			if(Befehl.equals("Windows"))
			{
				RadioMotif.setSelected(false);
				RadioJava.setSelected(false);
				UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
				SwingUtilities.updateComponentTreeUI(this);
			}
			if(Befehl.equals("Motif"))
			{
				RadioJava.setSelected(false);
				RadioWindows.setSelected(false);
				UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
				SwingUtilities.updateComponentTreeUI(this);
			}
		}catch(Exception ex){ex.printStackTrace();}

	}
}
