Folien PDF
L2G Video
Eclipse Projekt ZIP

GridLayout Dialog

import java.awt.GridLayout;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class GridLayoutDialog {
	private JDialog dialogfenster;
	
	private JButton okButton;
	private JButton abbrechenButton;
	
	private JFormattedTextField zahleneingabeField;
	private JLabel zahleneingabeLabel;
	
	private boolean okGeklickt = false;
	
	public GridLayoutDialog(JFrame hauptfenster) {
		// Dialog für hauptfenster mit Modalität
		dialogfenster = new JDialog(hauptfenster,true);
		
		dialogfenster.setTitle("GridLayoutDialog");
		
		// Gridlayout 2x2 mit 10px platz zwischen den Elementen
		dialogfenster.setLayout(new GridLayout(2, 2, 10, 10));
		
		createButtons();
		createFields();
		
		dialogfenster.pack();
	}

	private void createButtons() {
		okButton = new JButton("OK");
		abbrechenButton = new JButton("Abbrechen");
		
		// Buttons in der Unteren Reihe hinzufügen
		dialogfenster.add(okButton,1,0);
		dialogfenster.add(abbrechenButton,1,1);
		
		okButton.addActionListener(event -> {
			okGeklickt = true;
			dialogfenster.setVisible(false);
		});
		
		abbrechenButton.addActionListener(
			event -> dialogfenster.setVisible(false)
		);
	}

	private void createFields() {
		// Format für deutsche Währung EUR
		NumberFormat EURformat = 
			NumberFormat.getCurrencyInstance(Locale.GERMANY);
		
		zahleneingabeLabel = new JLabel("GELD!!!");
		zahleneingabeField = new JFormattedTextField(EURformat);
		
		zahleneingabeField.setValue(new Integer(0));
		
		dialogfenster.add(zahleneingabeLabel,0,0);
		dialogfenster.add(zahleneingabeField,0,1);
	}

	public boolean isOkGeklickt() {
		return okGeklickt;
	}
	
	public void showDialog()
	{
		okGeklickt = false;
		zahleneingabeField.setValue(new Integer(0));
		
		dialogfenster.setVisible(true);
	}
}

BoxLayout Dialog

import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class BoxLayoutDialog {
	private JDialog dialogfenster;
	
	private JPanel buttonPanel;
	private JButton okButton;
	private JButton abbrechenButton;
	
	private JPanel eingabePanel;
	private JFormattedTextField zahleneingabeField;
	private JLabel zahleneingabeLabel;
	
	private boolean okGeklickt = false;
	
	public BoxLayoutDialog(JFrame hauptfenster) {
		// Dialog für hauptfenster mit Modalität
		dialogfenster = new JDialog(hauptfenster,true);
		
		dialogfenster.setTitle("BoxLayoutDialog");
		
		dialogfenster.setLayout(new BoxLayout(dialogfenster.getContentPane(), 
											  BoxLayout.Y_AXIS));
		
		createFields();
		createButtons();
		
		dialogfenster.pack();
	}

	private void createButtons() {
		buttonPanel = new JPanel();
		buttonPanel.setLayout(new BoxLayout(buttonPanel,BoxLayout.X_AXIS));
		
		okButton = new JButton("OK");
		abbrechenButton = new JButton("Abbrechen");
		
		// Buttons in der Unteren Reihe hinzufügen
		buttonPanel.add(okButton);
		buttonPanel.add(abbrechenButton);
		
		okButton.addActionListener(event -> {
			okGeklickt = true;
			dialogfenster.setVisible(false);
		});
		
		abbrechenButton.addActionListener(event -> dialogfenster.setVisible(false));
		
		dialogfenster.add(buttonPanel);
	}

	private void createFields() {
		eingabePanel = new JPanel();
		eingabePanel.setLayout(new BoxLayout(eingabePanel,BoxLayout.X_AXIS));
		
		// Format für deutsche Währung EUR
		NumberFormat EURformat = NumberFormat.getCurrencyInstance(Locale.GERMANY);
		
		zahleneingabeLabel = new JLabel("GELD!!!");
		zahleneingabeField = new JFormattedTextField(EURformat);
		
		zahleneingabeField.setValue(new Integer(0));
		
		eingabePanel.add(zahleneingabeLabel);
		eingabePanel.add(zahleneingabeField);
		
		dialogfenster.add(eingabePanel);
	}

	public boolean isOkGeklickt() {
		return okGeklickt;
	}
	
	public void showDialog()
	{
		okGeklickt = false;
		zahleneingabeField.setValue(new Integer(0));
		
		dialogfenster.setVisible(true);
	}
}

SpringLayout

import java.awt.Component;
import java.awt.Container;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Spring;
import javax.swing.SpringLayout;
import javax.swing.SwingConstants;

public class SpringLayoutDialog {
	private JDialog dialogfenster;
	private Container contentpane;
	private SpringLayout layout;
	
	private JButton okButton;
	private JButton abbrechenButton;
	
	private JFormattedTextField zahleneingabeField;
	private JLabel zahleneingabeLabel;
	
	private boolean okGeklickt = false;
	
	private final int paddingFensterRahmen = 10;
	private final int paddingComponentenZusammen = 15;
	private final int paddingComponentenAuseinander = 30;
	
	public SpringLayoutDialog(JFrame hauptfenster) {
		// Dialog für hauptfenster mit Modalität
		dialogfenster = new JDialog(hauptfenster,true);
		contentpane = dialogfenster.getContentPane();
		layout = new SpringLayout();
		
		dialogfenster.setTitle("SpringLayoutDialog");
		
		contentpane.setLayout(layout);
		
		createButtons();
		createFields();
		createLayout();
		
		dialogfenster.pack();
	}

	private void createLayout() {
		
		// Label in die linke Obere Ecke positionieren
		layout.putConstraint(SpringLayout.WEST, 
			zahleneingabeLabel, 
			paddingFensterRahmen, 
			SpringLayout.WEST, 
			contentpane);
		layout.putConstraint(SpringLayout.NORTH, 
			zahleneingabeLabel, 
			paddingFensterRahmen, 
			SpringLayout.NORTH, 
			contentpane);
		
		// JFormattedTextField links neben das Label
		layout.putConstraint(SpringLayout.WEST, 
			zahleneingabeField, 
			paddingComponentenZusammen, 
			SpringLayout.EAST, 
			zahleneingabeLabel );
		layout.putConstraint(SpringLayout.NORTH, 
			zahleneingabeField, 
			paddingFensterRahmen, 
			SpringLayout.NORTH, 
			contentpane);
		
		// Abstand von zahleneingabeField zu rechten Fensterrahmen
		layout.putConstraint(SpringLayout.EAST, 
			contentpane, 
			paddingFensterRahmen, 
			SpringLayout.EAST, 
			zahleneingabeField);
		
		// okButton Links unter dem zahleneingabeLabel
		layout.putConstraint(SpringLayout.WEST, 
			okButton, 
			paddingFensterRahmen, 
			SpringLayout.WEST, 
			contentpane);
		layout.putConstraint(SpringLayout.NORTH, 
			okButton, 
			paddingComponentenAuseinander, 
			SpringLayout.SOUTH, 
			zahleneingabeLabel);
		
		// abbrechenButton rechts unter dem zahleneingabeField
		layout.putConstraint(SpringLayout.EAST, 
			abbrechenButton, 
			-paddingFensterRahmen, 
			SpringLayout.EAST, 
			contentpane );
		layout.putConstraint(SpringLayout.NORTH, 
			abbrechenButton, 
			paddingComponentenAuseinander, 
			SpringLayout.SOUTH, 
			zahleneingabeField);
		
		// 5px platz zwischen buttons und unteren fensterrahmen
		layout.putConstraint(SpringLayout.SOUTH, 
			contentpane, 
			paddingFensterRahmen, 
			SpringLayout.SOUTH, 
			okButton);
		layout.putConstraint(SpringLayout.SOUTH, 
			contentpane, 
			paddingFensterRahmen, 
			SpringLayout.SOUTH, 
			abbrechenButton);
		
		Spring maxWidthSpring = 
			layout.getConstraints(contentpane.getComponent(0))
			.getWidth();
		Spring maxHeightSpring = 
			layout.getConstraints(contentpane.getComponent(0))
			.getHeight();
		
		// Größte Komponente herausfinden
		for(Component comp : contentpane.getComponents()) {
			SpringLayout.Constraints cons = layout.getConstraints(comp);
			
			maxWidthSpring = Spring.max(maxWidthSpring, cons.getWidth());
			maxHeightSpring = Spring.max(maxHeightSpring, cons.getHeight());
		}
		
		// Setzte alle Komponenten auf die größte Größe
		for(Component comp : contentpane.getComponents())
		{
			SpringLayout.Constraints constraints = layout.getConstraints(comp);
			constraints.setWidth(maxWidthSpring);
			constraints.setHeight(maxHeightSpring);
		}
		
	}

	private void createButtons() {
		okButton = new JButton("OK");
		abbrechenButton = new JButton("Abbrechen");
		
		// Buttons in der Unteren Reihe hinzufügen
		contentpane.add(okButton);
		contentpane.add(abbrechenButton);
		
		okButton.addActionListener(event -> {
			okGeklickt = true;
			dialogfenster.setVisible(false);
		});
		
		abbrechenButton.addActionListener(event -> dialogfenster.setVisible(false));
	}

	private void createFields() {
		// Format für deutsche Währung EUR
		NumberFormat EURformat = NumberFormat.getCurrencyInstance(Locale.GERMANY);
		
		zahleneingabeLabel = new JLabel("Geld: ",SwingConstants.RIGHT);
		zahleneingabeField = new JFormattedTextField(EURformat);
		zahleneingabeField.setColumns(10);
		
		zahleneingabeField.setValue(new Integer(0));
		
		contentpane.add(zahleneingabeLabel);
		contentpane.add(zahleneingabeField);
	}

	public boolean isOkGeklickt() {
		return okGeklickt;
	}
	
	public void showDialog()
	{
		okGeklickt = false;
		zahleneingabeField.setValue(new Integer(0));
		
		dialogfenster.setVisible(true);
	}
}