import javax.swing.*;
import javax.swing.border.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class JSwingEigenschaften
{

	public static void main(String[] args)
	{
		final JFrame einFenster = new JFrame("Swing-Steuerelemente");

		einFenster.setSize(800, 600);
	    einFenster.getContentPane().setLayout(new FlowLayout());

		// Drei Radiobuttons    
    	// Gruppenobjekt erzeugen
		ButtonGroup dieUIGruppe = new ButtonGroup();

		// Container mit GridLayout für die Radiobuttons
		JPanel radioPanel = new JPanel();
		radioPanel.setLayout(new GridLayout(3,1));

		// Erzeugen der Schaltflächen und Zuweisen von ActionListener und Befehlsnamen
		JRadioButton radioJava = new JRadioButton("Java Look and Feel", true);
		radioPanel.add(radioJava);
		dieUIGruppe.add(radioJava);

		JRadioButton radioWindows = new JRadioButton("Windows Look and Feel",false);
		radioPanel.add(radioWindows);
		dieUIGruppe.add(radioWindows);

		JRadioButton radioMotif = new JRadioButton("Motif Look and Feel", false);
		radioPanel.add(radioMotif);
		dieUIGruppe.add(radioMotif);

		einFenster.getContentPane().add(radioPanel);

		// Eine Fortschrittsanzeige
		JProgressBar derBalken = new JProgressBar();
		derBalken.setOrientation(JProgressBar.HORIZONTAL);
		derBalken.setMaximum(100);
		derBalken.setMinimum(1);
		derBalken.setValue(33);
		einFenster.getContentPane().add(derBalken);
		
		// Ein Rollbalken
		JScrollBar derRollBalken = new JScrollBar();
		derRollBalken.setOrientation(JProgressBar.HORIZONTAL);
		derRollBalken.setMaximum(100);
		derRollBalken.setMinimum(1);
		derRollBalken.setValue(33);
		derRollBalken.setPreferredSize(new Dimension(100, 50));
		einFenster.getContentPane().add(derRollBalken);
		
		// Ein Schieberegler
		JSlider derRegler = new JSlider(JSlider.HORIZONTAL, 0, 80, 30);
		derRegler.setOrientation(JProgressBar.HORIZONTAL);	
		derRegler.setMaximum(100);
		derRegler.setMinimum(1);
		derRegler.setValue(33);
		derRegler.createStandardLabels(10);
		derRegler.setPaintLabels(true);
		derRegler.setMajorTickSpacing(20);
		derRegler.setMinorTickSpacing(5);
		einFenster.getContentPane().add(derRegler);


		// Eine Combo-Box
		// Inhalt definieren
		Object[] InhaltderComboBox = {"Zeile 1", "Zeile 2", "Zeile 3", "Zeile 4", "Zeile 5"};

		// ComboBox erzeugen
		JComboBox dieComboBox = new JComboBox(InhaltderComboBox);

		// Eigenschaften festlegen
		dieComboBox.setEditable(true);
		dieComboBox.setPreferredSize(new Dimension (100, 30));
		dieComboBox.setSelectedItem(InhaltderComboBox[2]);

		// dem Fenster hinzufügen
		einFenster.getContentPane().add(dieComboBox);
		
		// Ein Split-Fenster 
		// Panels für linke und rechte Hälfte erzeugen
		JPanel	dieLinkeSeite = new JPanel();
		JPanel	dieRechteSeite = new JPanel();
		dieRechteSeite.setBackground(Color.lightGray);
		dieRechteSeite.setPreferredSize(new Dimension(100,50));
		dieRechteSeite.add(new JLabel("rechts"));
		dieLinkeSeite.setPreferredSize(new Dimension(100,50));
		dieLinkeSeite.add(new JLabel("links"));

		// Erzeugen des Splitviews mit Hilfe der beiden Panels
		JSplitPane derSplitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
								true, dieLinkeSeite, dieRechteSeite);
		einFenster.getContentPane().add(derSplitter);
		
		// Eine Liste in einer Registerkarte
		// Inhalt definieren
		Object[] InhaltderListe = {"Zeile 1", "Zeile 2", "Zeile 3", "Zeile 4", "Zeile 5"};

		// Liste erzeugen, Eigenschaften setzen und in eine rollbare Fläche (JScrollPane) einsetzen
		JList dieListe = new JList(InhaltderListe);
		dieListe.setVisibleRowCount(1);
		dieListe.setFixedCellHeight(15);
		dieListe.setSize(100, 30);
		JScrollPane dieScrollFlaeche = new JScrollPane(dieListe);

		// Registerkarten-Panel erzeugen
		JTabbedPane dieReiter = new JTabbedPane();

		// Registerkarten hinzufügen - der ersten Registerkarte wird 
		// bei Erzeugung die Fläche mit der Liste beigefügt
		dieReiter.addTab("erster", dieScrollFlaeche);
		dieReiter.addTab("zweiter", null);
		dieReiter.addTab("dritter", null);
		dieReiter.addTab("vierter", null);

		// Eigenschaften setzen
		dieReiter.setPreferredSize(new Dimension(200, 200));

		// Registerkarten zum Fenster hinzufügen
		einFenster.getContentPane().add(dieReiter);
		
		// Ein Baum
		// Erzeugen der einzelnen Knoten
		DefaultMutableTreeNode wurzelKnoten = new DefaultMutableTreeNode("Pakete");
		DefaultMutableTreeNode elternKnoten = new DefaultMutableTreeNode("java");
		DefaultMutableTreeNode knoten = new DefaultMutableTreeNode("awt");

		// Aufbau des ersten Asts
		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);

		// Aufbau des zweiten Asts
		elternKnoten = new DefaultMutableTreeNode("javax");
		knoten 		= new DefaultMutableTreeNode("swing");
		elternKnoten.add(knoten);
		knoten 		= new DefaultMutableTreeNode("servlet");
		elternKnoten.add(knoten);
		wurzelKnoten.add(elternKnoten);

		// Erzeugen des Baums mit Hilfe des Wurzelknotens
		JTree derBaum = new JTree(wurzelKnoten);

		// Eigenschaften festlegen
		derBaum.setPreferredSize(new Dimension(150, 200));
		einFenster.getContentPane().add(derBaum);
		
		// Eine Tabelle
		// Tabelleninhalt als Objekt-Array definieren
		Object[][] TabellenInhalt =
		{
			{"Zeile1,ZelleA","Zeile1,ZelleB","Zeile1,ZelleC","Zeile1,ZelleD"},
			{"Zeile2,ZelleA","Zeile2,ZelleB","Zeile2,ZelleC","Zeile2,ZelleD"},
			{"Zeile3,ZelleA","Zeile3,ZelleB","Zeile3,ZelleC","Zeile3,ZelleD"},
			{"Zeile4,ZelleA","Zeile4,ZelleB","Zeile4,ZelleC","Zeile4,ZelleD"},
			{"Zeile5,ZelleA","Zeile5,ZelleB","Zeile5,ZelleC","Zeile5,ZelleD"},
		};

		// Spaltennamen festlegen
		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");

		// Tabelle erzeugen
		JTable dieTabelle = new JTable(TabellenInhalt, SpaltenNamen);

		// Eigenschaften setzen
		dieTabelle.setGridColor(Color.black);
		dieTabelle.setShowGrid(true);

		// Tabelle in Panel einfügen
		JPanel TabellenPanel = new JPanel();
		TabellenPanel.add(dieTabelle);

		// dem Fenster hinzufügen
		einFenster.getContentPane().add(TabellenPanel);

		einFenster.addWindowListener(
			new WindowAdapter() {
				public void windowClosing(WindowEvent e)
				{
					einFenster.setVisible(false);	
					System.exit(0);	
				}
			}
		);				

		// Alle Elemente anordnen und darstellen
	    einFenster.pack();
    	einFenster.setVisible(true);
	}	
}