Swing Nulllayout

Zet

Aktives Mitglied
Hallo zusammen,


Ich weiß ich weiß, nullLayout ist nicht das gelbe vom Ei und ungerne gesehen.
ich habe allerdings mit den anderen Layouts ebenfalls große Probleme, und möchte Schritt für Schritt mir diese aneignen.

Ich versuche mit dem nullLayout 4 zeilen zu erstellen, um mit der Positionierung zu spielen.
Und ich komme einfach nicht darauf, weshalb das erste JPanel das gesamte Fenster ausfüllt,
während die anderen (scheinbar) korrekt funktionieren.
Liegen zweiteZeile, dritteZeile, vierteZeile auf ersteZeile, oder sind irre ich mich und sie sind auf verschiedenen Ebenen?

Ich hoffe ihr könnt mir helfen.

Java:
public class GUItest extends JFrame {

	public static void main(String[] args) {
		GUItest otest = new GUItest();
	}

	JButton generateButton;
	JButton copyButton;
	JButton lowPwButton;
	JButton midPwButton;
	JButton highPwButton;

	JLabel laengeLabel;
	JLabel ausgabeLabel;
	JLabel staerkeLabel;

	JTextField laengeFeld;
	JTextField ausgabeFeld;
	JLabel staerkeFeld;

	GUItest() {
		setSize(600, 400);
		JPanel ersteZeile = new JPanel();
		JPanel zweiteZeile = new JPanel();
		JPanel dritteZeile = new JPanel();
		JPanel vierteZeile = new JPanel();

		ersteZeile.setBounds(25, 25, 525, 50);
		ersteZeile.setLayout(null);
		ersteZeile.setBackground(Color.red);

		zweiteZeile.setBounds(25, 100, 525, 50);
		zweiteZeile.setLayout(null);
		zweiteZeile.setBackground(Color.blue);

		dritteZeile.setBounds(25, 175, 525, 50);
		dritteZeile.setLayout(null);
		dritteZeile.setBackground(Color.green);

		vierteZeile.setBounds(25, 250, 525, 50);
		vierteZeile.setLayout(null);
		vierteZeile.setBackground(Color.yellow);

		add(vierteZeile);
		add(dritteZeile);
		add(zweiteZeile);
		add(ersteZeile);

		setBackground(Color.black);
		setVisible(true);

	}


Greetz Zet
 

ssoul26

Bekanntes Mitglied
Du musst erst einmal das Layout auf "null" setzen, dann kannst du beliebig über die Bounds platzieren.

Java:
   dd() {
      setSize(600, 400);

//Layout auf null setzen!
      setLayout(null);


      JPanel ersteZeile = new JPanel();
      JPanel zweiteZeile = new JPanel();
      JPanel dritteZeile = new JPanel();
      JPanel vierteZeile = new JPanel();
      ersteZeile.setBounds(25, 25, 525, 50);
      ersteZeile.setLayout(null);
      ersteZeile.setBackground(Color.red);
      zweiteZeile.setBounds(25, 100, 525, 50);
      zweiteZeile.setLayout(null);
      zweiteZeile.setBackground(Color.blue);
      dritteZeile.setBounds(25, 175, 525, 50);
      dritteZeile.setLayout(null);
      dritteZeile.setBackground(Color.green);
      vierteZeile.setBounds(25, 250, 525, 50);
      vierteZeile.setLayout(null);
      vierteZeile.setBackground(Color.yellow);
      add(vierteZeile);
      add(dritteZeile);
      add(zweiteZeile);
      add(ersteZeile);
      setBackground(Color.black);
      setVisible(true);
   }
 
Zuletzt bearbeitet:

ssoul26

Bekanntes Mitglied
Hier z.B. machst des mit GridLayout! :) Ist auch nicht kompliziert!
Java:
 dd() {
      setSize(600, 400);
      //GridLayout
      //erster Parameter steht für Anzahl der Zeilen, wobei 0 für beliebig steht
      //zweiter Parameter steht für Anzahl der Spalten, wobei 0 für beliebig stehen kann
      setLayout(new GridLayout(0, 1));
      JPanel ersteZeile = new JPanel();
      JPanel zweiteZeile = new JPanel();
      JPanel dritteZeile = new JPanel();
      JPanel vierteZeile = new JPanel();
      ersteZeile.setBounds(25, 25, 525, 50);
      ersteZeile.setLayout(null);
      ersteZeile.setBackground(Color.red);
      zweiteZeile.setBounds(25, 100, 525, 50);
      zweiteZeile.setLayout(null);
      zweiteZeile.setBackground(Color.blue);
      dritteZeile.setBounds(25, 175, 525, 50);
      dritteZeile.setLayout(null);
      dritteZeile.setBackground(Color.green);
      vierteZeile.setBounds(25, 250, 525, 50);
      vierteZeile.setLayout(null);
      vierteZeile.setBackground(Color.yellow);
      add(vierteZeile);
      add(dritteZeile);
      add(zweiteZeile);
      add(ersteZeile);
      setBackground(Color.black);
      setVisible(true);
   }
 

Zet

Aktives Mitglied
Danke für den Code! - sind zwar die ersten gehversuche, aber immerhin bekomme ich langsam ein wenig gefühl dafür. Nun habe ich mal auf 2 Spalten erweitert und einen Button hinzugefügt, warum werden die Panels nun gegen den Uhrzeigersinn angeordnet?

Ich glaube ich hol mir erstmal nen Kaffee und experementiere, bevor ich hier weiter unnötig Fragen stelle.:lol:


Dank dir nochmal :rtfm:


Java:
JButton bTestButton;
	GUItest() {
		setSize(600, 400);
		// GridLayout erster Parameter steht für Anzahl der Zeilen, wobei 0 für beliebig steht
		//zweiter Parameter steht für Anzahl der Spalten, wobei 0 für beliebig stehen kann

		bTestButton = new JButton("Testbutton");
		bTestButton.setBounds(25,150,125,25);
		setLayout(new GridLayout(0, 2));
		
		JPanel ersteZeile = new JPanel();
		JPanel zweiteZeile = new JPanel();
		JPanel dritteZeile = new JPanel();
		JPanel vierteZeile = new JPanel();
		
		ersteZeile.setBounds(25, 25, 525, 50);
		ersteZeile.setLayout(null);
		ersteZeile.setBackground(Color.red);
		
		zweiteZeile.setBounds(25, 100, 525, 50);
		zweiteZeile.setLayout(null);
		zweiteZeile.setBackground(Color.blue);
		
		dritteZeile.setBounds(25, 175, 525, 50);
		dritteZeile.setLayout(null);
		dritteZeile.setBackground(Color.green);
		
		vierteZeile.setBounds(25, 250, 525, 50);
		vierteZeile.setLayout(null);
		vierteZeile.setBackground(Color.yellow);
		
		vierteZeile.add(bTestButton);
		
		add(vierteZeile);
		add(dritteZeile);
		add(zweiteZeile);
		add(ersteZeile);
		setBackground(Color.black);
		setVisible(true);
	}
 

ssoul26

Bekanntes Mitglied
Die erste Reihe müsste sein (von links nach rechts) gelb (mit dem JButton im Panel) dann grün
Die zweite Reihe (von links nach rechts) blau dann rot
usw..

Ist es bei dir nicht so?

Die Bounds kannst du weglassen, wenn du den GridLayout nimmst.
 
Zuletzt bearbeitet:

Zet

Aktives Mitglied
Doch, das ist bei mir genauso.

Aber ich war der Meinung die Farben müssten
rot blau
grün gelb
sein
_______________
|__0,0__|__1,0__|
|__0,1__|__1,1__|

So in etwa hatte ich mir gedacht, würde GridLayout(0,2) angeordnet werden.


Nun habe ich mein vorheriges nullLayout mit dem Gridlayout versucht zu realiseren, sieht nur leider ziemlich bescheiden aus. Kann ich die Komponenten in den Panels sowie den Panels selber größen zuweisen?
Oder gehe ich sowieso an die Sache falsch heran?
Füllen die Komponenten immer das gesamte Panel aus, dann müsste ich ja für jede Komponente einen Container erstellen.

so sieht es momentan aus:

Java:
JButton generateButton;
	JButton copyButton;
	JButton schwachButton;
	JButton mittelButton;
	JButton starkButton;

	JLabel passwortLaengeLabel;
	JLabel generatePasswortLabel;
	JLabel passwortStaerkeLabel;
	JLabel staerkeFeld;
	
	
	JTextField eingabeLaengeFeld;
	JTextField ausgabeGeneriertesFeld;
	
	

	GUI() 
	{
		setSize(600, 400);
		setTitle("Passwortgenerator");
		setLocationRelativeTo(getParent());
		setLayout(new GridLayout(0,1));

		JPanel ersteZeile = new JPanel(new GridLayout(0,3));
		JPanel zweiteZeile = new JPanel(new GridLayout(0,4));
		JPanel dritteZeile = new JPanel(new GridLayout(0,3));
		
		// Labels
		passwortLaengeLabel = new JLabel("Länge des Passworts : ");	
		generatePasswortLabel = new JLabel("Generiertes Passwort : ");
		passwortStaerkeLabel = new JLabel("Stärke des Passworts");
		staerkeFeld = new JLabel();

		// Eingabefelder
		eingabeLaengeFeld = new JTextField();
	// 	eingabeLaengeFeld.setBounds(300,0,50,50);
		ausgabeGeneriertesFeld = new JTextField();
	
		
		
		// Buttons 
		generateButton = new JButton("Generate");
		generateButton.addActionListener(this);
		generateButton.setActionCommand("bGenerate");

		copyButton = new JButton("Copy Password");
		copyButton.addActionListener(this);
		copyButton.setActionCommand("bCopy");
		
		schwachButton = new JButton("Schwach");
		mittelButton = new JButton("Mittel");
		starkButton = new JButton("Stark");
		
		
		
		// Panels 
		// Die Panels haben ja Gridlayout, sehe ich das richtig das ich 
		// das gesamte Panel als eine ganze Spalte habe und dieses mit
		// den einzelnen Panels weiter Verschachtel?
		
		//ersteZeile.setBounds(0,0,600,100);
		ersteZeile.add(passwortLaengeLabel);
		ersteZeile.add(eingabeLaengeFeld);
		ersteZeile.add(generateButton);
		
		// zweiteZeile.setBounds(150,100,600,100);
		zweiteZeile.add(passwortStaerkeLabel);
		zweiteZeile.add(schwachButton);
		zweiteZeile.add(mittelButton);
		zweiteZeile.add(starkButton);
		
		
		// dritteZeile.setBounds(300,200,600,100);
		dritteZeile.add(generatePasswortLabel);
		dritteZeile.add(ausgabeGeneriertesFeld);
		dritteZeile.add(copyButton);
		

		
		add(ersteZeile);
		add(zweiteZeile);
		add(dritteZeile);
		setVisible(true);

	}


Ziel war in etwa folgendes:
http://i62.tinypic.com/23u1wyx.jpg

Womöglich sollte ich wirklich ersteinmal einige Tutorials abarbeiten, bevor ich mich um ein kleines Projekt kümmere..

In diesem Sinne!
Zet
 

ssoul26

Bekanntes Mitglied
Doch, das ist bei mir genauso.

Aber ich war der Meinung die Farben müssten
rot blau
grün gelb
sein
_______________
|__0,0__|__1,0__|
|__0,1__|__1,1__|

So in etwa hatte ich mir gedacht, würde GridLayout(0,2) angeordnet werden.


Nun habe ich mein vorheriges nullLayout mit dem Gridlayout versucht zu realiseren, sieht nur leider ziemlich bescheiden aus. Kann ich die Komponenten in den Panels sowie den Panels selber größen zuweisen?
Oder gehe ich sowieso an die Sache falsch heran?
Füllen die Komponenten immer das gesamte Panel aus, dann müsste ich ja für jede Komponente einen Container erstellen.

so sieht es momentan aus:

Java:
JButton generateButton;
	JButton copyButton;
	JButton schwachButton;
	JButton mittelButton;
	JButton starkButton;

	JLabel passwortLaengeLabel;
	JLabel generatePasswortLabel;
	JLabel passwortStaerkeLabel;
	JLabel staerkeFeld;
	
	
	JTextField eingabeLaengeFeld;
	JTextField ausgabeGeneriertesFeld;
	
	

	GUI() 
	{
		setSize(600, 400);
		setTitle("Passwortgenerator");
		setLocationRelativeTo(getParent());
		setLayout(new GridLayout(0,1));

		JPanel ersteZeile = new JPanel(new GridLayout(0,3));
		JPanel zweiteZeile = new JPanel(new GridLayout(0,4));
		JPanel dritteZeile = new JPanel(new GridLayout(0,3));
		
		// Labels
		passwortLaengeLabel = new JLabel("Länge des Passworts : ");	
		generatePasswortLabel = new JLabel("Generiertes Passwort : ");
		passwortStaerkeLabel = new JLabel("Stärke des Passworts");
		staerkeFeld = new JLabel();

		// Eingabefelder
		eingabeLaengeFeld = new JTextField();
	// 	eingabeLaengeFeld.setBounds(300,0,50,50);
		ausgabeGeneriertesFeld = new JTextField();
	
		
		
		// Buttons 
		generateButton = new JButton("Generate");
		generateButton.addActionListener(this);
		generateButton.setActionCommand("bGenerate");

		copyButton = new JButton("Copy Password");
		copyButton.addActionListener(this);
		copyButton.setActionCommand("bCopy");
		
		schwachButton = new JButton("Schwach");
		mittelButton = new JButton("Mittel");
		starkButton = new JButton("Stark");
		
		
		
		// Panels 
		// Die Panels haben ja Gridlayout, sehe ich das richtig das ich 
		// das gesamte Panel als eine ganze Spalte habe und dieses mit
		// den einzelnen Panels weiter Verschachtel?
		
		//ersteZeile.setBounds(0,0,600,100);
		ersteZeile.add(passwortLaengeLabel);
		ersteZeile.add(eingabeLaengeFeld);
		ersteZeile.add(generateButton);
		
		// zweiteZeile.setBounds(150,100,600,100);
		zweiteZeile.add(passwortStaerkeLabel);
		zweiteZeile.add(schwachButton);
		zweiteZeile.add(mittelButton);
		zweiteZeile.add(starkButton);
		
		
		// dritteZeile.setBounds(300,200,600,100);
		dritteZeile.add(generatePasswortLabel);
		dritteZeile.add(ausgabeGeneriertesFeld);
		dritteZeile.add(copyButton);
		

		
		add(ersteZeile);
		add(zweiteZeile);
		add(dritteZeile);
		setVisible(true);

	}


Ziel war in etwa folgendes:
http://i62.tinypic.com/23u1wyx.jpg

Womöglich sollte ich wirklich ersteinmal einige Tutorials abarbeiten, bevor ich mich um ein kleines Projekt kümmere..

In diesem Sinne!
Zet

Das GridLayout macht alles richtig.

Achte mal auf deine Reihenfolge im Code:
Java:
add(vierteZeile);
add(dritteZeile);
add(zweiteZeile);
add(ersteZeile);
Damit du Rot,Blau,Grün,Gelb haben kannst, musst du die Reihenfolge ändern!
Java:
add(ersteZeile);
add(zweiteZeile);
add(dritteZeile);
add(vierteZeile);
 

Zet

Aktives Mitglied
Scheine heute nicht auf der höhe zu sein...:bahnhof:

Danke dir für deine mühen, werde mich am Wochenende damit beschäftigen und hoffentlich solche Fehler vermeiden :D.

Werden GUI's überhaupt im normalfall gecodet, oder per Builder generiert?


Schönes Wochenende,
Zet
 

ssoul26

Bekanntes Mitglied
Doch, das ist bei mir genauso.

Aber ich war der Meinung die Farben müssten
rot blau
grün gelb
sein
_______________
|__0,0__|__1,0__|
|__0,1__|__1,1__|

So in etwa hatte ich mir gedacht, würde GridLayout(0,2) angeordnet werden.

_______________
|__1__|__2__|
|__3__|__4__|
|__x__|_x+1_|
usw...

So sieht GridLayout(0,2) aus.

____________________
|__1__|__2__|__3__|
|__4__|__5__|__6__|

So sieht GridLayout(2,3) aus.



Scheine heute nicht auf der höhe zu sein...:bahnhof:

Danke dir für deine mühen, werde mich am Wochenende damit beschäftigen und hoffentlich solche Fehler vermeiden :D.

Werden GUI's überhaupt im normalfall gecodet, oder per Builder generiert?


Schönes Wochenende,
Zet

Es kommt immer darauf an, was für eine GUI man macht. Aber generell codiert man sich den "Haufen" selber zusammen:) Die "einfache" GUI wie hier kann man natürlich auch per Builder generieren lassen.

Mach einfach das, was dir am meisten Spass macht:)


Hier hast du mal ein Beispiel zu deinem Vorhaben! Ist nicht perfekt, aber auf die schnelle eben gemacht:)
Java:
   JButton generateButton;

   JButton copyButton;

   JCheckBox schwachButton;

   JCheckBox mittelButton;

   JCheckBox starkButton;

   JLabel passwortLaengeLabel;

   JLabel generatePasswortLabel;

   JLabel passwortStaerkeLabel;

   JLabel staerkeFeld;

   JTextField eingabeLaengeFeld;

   JTextField ausgabeGeneriertesFeld;

   dd() {
      setSize(600, 400);
      setTitle("Passwortgenerator");
      // Platziert das Fenster in der Mitte
      setLocationRelativeTo(null);
      // gibt dem Hauptfenster das BorderLayout mit
      setLayout(new BorderLayout());
      JPanel ersteZeile = new JPanel(new FlowLayout(FlowLayout.LEFT));
      JPanel zweiteZeile = new JPanel(new FlowLayout(FlowLayout.LEFT));
      JPanel dritteZeile = new JPanel(new FlowLayout(FlowLayout.LEFT));
      // Labels
      passwortLaengeLabel = new JLabel("Länge des Passworts : ");
      generatePasswortLabel = new JLabel("Generiertes Passwort : ");
      passwortStaerkeLabel = new JLabel("Stärke des Passworts");
      staerkeFeld = new JLabel();
      // Eingabefelder
      eingabeLaengeFeld = new JTextField(15);
      // eingabeLaengeFeld.setBounds(300,0,50,50);
      ausgabeGeneriertesFeld = new JTextField(15);
      // Buttons
      generateButton = new JButton("Generate");
      generateButton.addActionListener(this);
      generateButton.setActionCommand("bGenerate");
      copyButton = new JButton("Copy");
      copyButton.addActionListener(this);
      copyButton.setActionCommand("bCopy");
      schwachButton = new JCheckBox("Schwach");
      mittelButton = new JCheckBox("Mittel");
      starkButton = new JCheckBox("Stark");
      // Panels
      // Die Panels haben ja Gridlayout, sehe ich das richtig das ich
      // das gesamte Panel als eine ganze Spalte habe und dieses mit
      // den einzelnen Panels weiter Verschachtel?
      // ersteZeile.setBounds(0,0,600,100);
      ersteZeile.add(passwortLaengeLabel);
      // Die Eingabe bzw. Interaktionselemente auf eigene Container setzen mit eigenem Layout!
      JPanel first = new JPanel(new FlowLayout(FlowLayout.LEFT));
      first.add(eingabeLaengeFeld);
      first.add(generateButton);
      ersteZeile.add(first);
      // zweiteZeile.setBounds(150,100,600,100);
      zweiteZeile.add(passwortStaerkeLabel);
      JPanel second = new JPanel(new FlowLayout(FlowLayout.LEFT));
      second.add(schwachButton);
      second.add(mittelButton);
      second.add(starkButton);
      zweiteZeile.add(second);
      // dritteZeile.setBounds(300,200,600,100);
      JPanel third = new JPanel(new FlowLayout(FlowLayout.LEFT));
      dritteZeile.add(generatePasswortLabel);
      third.add(ausgabeGeneriertesFeld);
      third.add(copyButton);
      dritteZeile.add(third);
      //
      // add(ersteZeile);
      // add(zweiteZeile);
      // add(dritteZeile);
      JPanel maincontent = new JPanel(new GridLayout(0, 1));
      maincontent.add(ersteZeile);
      maincontent.add(zweiteZeile);
      maincontent.add(dritteZeile);
      add(maincontent, BorderLayout.NORTH);
      pack();
      setVisible(true);
   }
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben