package javacodebook.gui.focustraversal;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

/**
 * @author Benjamin Rusch
 * 
 * In diesem Bespiel wird demonstriert wie man die Fokus-Reihenfolge mit 
 * der jdk1.3 Version ändern konnte. Geht aber nur für Swing, nicht für AWT.
 */

public class FocusTraversalJFrame  extends JFrame {
	
	private JButton addButton		= new JButton("Hinzufügen");
	private JButton deleteButton	= new JButton("Löschen");
	private JTextField field 		= new JTextField(15);
	private JPanel north			= new JPanel(); 
	private JTextArea editor		= new JTextArea(9,20);
	private Container content		= null;	
	
	/**
 	*	Konstruktor von FocusTraversalJFrame.  
 	*/	
	public FocusTraversalJFrame(String title) {
		super(title);
	
		content = this.getContentPane();

		// initialen Focus aufs TextFeld setzen
		addWindowListener(new WindowAdapter() {
	        public void windowOpened(WindowEvent e) {
	            field.requestFocus(); // Focus wird gesetzt
	        }
	        public void windowClosing(WindowEvent e) {
	            System.exit(0);
	        }
	    });
		
		// Anmelden eines ActionListeners an den addButton
		addButton.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent ae){
						editor.append(field.getText());
					}
				});
		
		// Anmelden eines ActionListeners an den deleteButton		
		deleteButton.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent ae){
						editor.setText("");
					}
				});

		// Über setNextFocusableComponent() kann zu jeder Komponente der 
		// direkte Nachfolger angegeben werden. Wichtig ist hierbei, dass man
		// den Kreis wieder schließt! 	
		addButton.setNextFocusableComponent(deleteButton);
		deleteButton.setNextFocusableComponent(field);
		field.setNextFocusableComponent(addButton);		
	
		/*	
		// Umgekehrte Reihenfolge sähe wie folgt aus:
		addButton.setNextFocusableComponent(field);
		field.setNextFocusableComponent(deleteButton);
		deleteButton.setNextFocusableComponent(addButton);
		*/
		
		// Platzieren der Komponenten
		north.add(addButton);
		north.add(deleteButton);
		north.add(field);

		content.add(north, BorderLayout.NORTH);
		content.add(editor);
	}
}
