# Taschenrechner-GUI mit BorderLayout?



## Astaroth (22. Apr 2011)

Hallo,

erstmal hallo an alle, hab mich soeben erst hier registriert, da ich vor einem Problem mit einer Aufgabe stehe, welche wir bekommen haben. Ich studieren Medieninformatik und bin jetzt im 2. Semester, wir haben soeben mit GUI-Entwicklung angefangen und haben nun die Aufgabe bekommen eine Taschenrechner-GUI sowohl mit GridLayout, FlowLayout als auch mit BorderLayout darzustellen. Die ersten beiden Layouts bereiteten mir keinerlei Probleme, aber BorderLayout will einfach nicht so wie ich will  

Die GUI soll so aussehen (oder so ähnlich, exakt gleich geht das wahrscheinlich nicht wirklich):






Mein Quelltext sieht bisher so aus:


```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class BorderLayout extends JFrame {
	public BorderLayout () {
		setSize(320, 190);
		setTitle("calc using border layout");
		Container contentPane = getContentPane();
		WindowDestroyer myListener = new WindowDestroyer();
		addWindowListener(myListener);
		
		JButton button1 = new JButton("1");
		JButton button2 = new JButton("2");
		JButton button3 = new JButton("3");
		JButton button4 = new JButton("4");
		JButton button5 = new JButton("5");
		JButton button6 = new JButton("6");
		JButton button7 = new JButton("7");
		JButton button8 = new JButton("8");
		JButton button9 = new JButton("9");
		JButton button0 = new JButton("0");
		JButton buttonplus = new JButton("+");
		JButton buttonminus = new JButton("-");
		JButton buttonmultiply = new JButton("x");
		JButton buttondivide = new JButton(":");
		JButton buttonresult = new JButton("=");
		JButton buttonclear = new JButton("C"); 
		
		contentPane.setLayout(new java.awt.BorderLayout());
		JTextArea display = new JTextArea("0", 1, 25);
		contentPane.add(display, java.awt.BorderLayout.NORTH);
		JPanel panel1 = new JPanel();
		JPanel panel2 = new JPanel();
		JPanel panel3 = new JPanel();
		JPanel panel4 = new JPanel();
		JPanel panel5 = new JPanel();
		contentPane.add(panel1, java.awt.BorderLayout.CENTER);
		panel1.setLayout(new java.awt.BorderLayout());
		panel1.add(panel2, java.awt.BorderLayout.NORTH);
		panel1.add(panel3, java.awt.BorderLayout.SOUTH);
		panel2.setLayout(new java.awt.BorderLayout());
		panel3.setLayout(new java.awt.BorderLayout());
		panel2.add(buttonplus, java.awt.BorderLayout.WEST);
		panel2.add(button1, java.awt.BorderLayout.CENTER);
		panel2.add(button2, java.awt.BorderLayout.CENTER);
		panel2.add(button3, java.awt.BorderLayout.EAST);
		
		setResizable(false);
		setVisible(true);
		
	}
	
	public static void main(String[] args) {
		BorderLayout calc = new BorderLayout();
	}
}
```

Jetzt habe ich allerdings das Problem das auch beim verschachteln der BorderLayouts immer ein Center-Block enthalten ist, welcher ja doppelt so breit ist wie die West und East-Blöcke, dadurch ist es für mich nicht möglich 4 Buttons nebeneinander anzuordnen so wie es das Beispiel verlangt. Oder hab ich bei der Verschachtelung etwas falsch gemacht? Ist es überhaupt möglich den Taschenrechner so wie er dort dargestellt ist nur über BorderLayout zu realisieren? Bin mir da nicht so sicher, habe zumindest keine andere Idee, mit anderen Layouts wäre es ja kein Problem.


----------



## WIaimy (22. Apr 2011)

Du könntest natürlich schummeln:
Ein JPanel-Objekt erstellen, dieses im Center einfügen und ein GridLayout für das JPanel festlegen. Die Buttons fügst du dann einfach dem JPanel hinzu.
Sonst würde mir spontan keine Möglichkeit einfallen, den Rechner wie dargestellt zu programmieren.


----------



## Astaroth (22. Apr 2011)

WIaimy hat gesagt.:


> Du könntest natürlich schummeln:
> Ein JPanel-Objekt erstellen, dieses im Center einfügen und ein GridLayout für das JPanel festlegen. Die Buttons fügst du dann einfach dem JPanel hinzu.
> Sonst würde mir spontan keine Möglichkeit einfallen, den Rechner wie dargestellt zu programmieren.



Ja, so würde es gehen, daran hab ich auch schon gedacht, nur ist die Aufgabe in der Hinsicht schwammig formuliert das ich nicht weiß ob man die Layouts mischen kann oder nicht, ich denke eher es geht darum nur mit einem gewissem Layout zu arbeiten.
Wenn es allerdings gar keine andere Möglichkeit gibt werde ich wohl diesen Umweg nehmen, Punkte sollte es dann trotzdem geben da man sich ja immerhin über eine Möglichkeit Gedanken gemacht hat.


----------



## Gast2 (23. Apr 2011)

Das ganze kannst du schon mit dem Borderlayout hinkriegen, auch wenns mit den anderen Layouts schon schöner ist 
Du kannst das Borderlayout ja beliebig schachteln und musst z.b. das Center gar nicht füllen.

Ich würds etwa so machen:
BorderLayout
--NORD--> Eingabefeld
--SOUTH--> ButtonPanel
Das buttonpanel teilst du wieder auf in EAST und WEST mit nem panel für je 8 Buttons, das Panel teilst du wieder in NORD, SOUTH mit je 4 Buttons, das panel teilst du dann wieder in EAST, WEST mit je 2 Buttons, dass du dann wieder aufteilst in NORD, SOUTH mit je 1 Buttom. Oder so ähnlich


----------



## Astaroth (24. Apr 2011)

Danke EikeB, hat so wunderbar funktioniert! Auch wenn das durch das ganze verschachteln echt unübersichtlich wird.


----------



## Gast2 (24. Apr 2011)

Joa, nen BorderLayout sollte dafür auch nicht die erste wahl sein


----------



## dattutorial (24. Apr 2011)

hat denn einer mal ein einfaches tutorial ueber GridBagLayout? frueher oder spaeter ist das ja dannn so..


----------

