Null-Layout - Wie geht es ohne?

ehlr

Aktives Mitglied
Hallo.

Bisher habe ich GUIs mit
Java:
Button.setBounds(100,100, 100, 25);
frame.getContentPane().add(Button);
etc. geschrieben.

Wie geht es, wenn man einen Layouter anstatt
Java:
this.getContentPane().setLayout(null);
verwendet?
Ich habe schon irgendwas mit
Java:
 x.setBounds.YAchse
oder so gehört.


lg
 
Zuletzt bearbeitet von einem Moderator:

ehlr

Aktives Mitglied
Ist das noch Up-To-Date ?

Java: Null Layout is Evil

Java:
import java.awt.FlowLayout;

import javax.swing.JLabel;
import javax.swing.JPanel;


public class GUI {

	JPanel panel = new JPanel();
	
	public GUI() {
		panel.setLayout(new FlowLayout());
		this.initWindow();
		panel.setVisible(true);
	}
	
	private void initWindow() {
		panel.add(new JLabel("Close"));
		this.setContentPane(panel);
		this.pack();
		
	}
	
}


Java:
setContentPane(panel);
und
Java:
this.pack();


werden unterkringelt???
 

ehlr

Aktives Mitglied
hehe, ist mir gerade auch eingefallen.

Java:
public class GUI extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	JPanel panel = new JPanel();
	
	public GUI() {
		panel.setLayout(new FlowLayout());
		this.initWindow();
		this.setVisible(true);
		this.setSize(400,400);
		this.setTitle("Test-Frame");
	}
	
	private void initWindow() {
		panel.add(new JLabel("Test"));
		panel.add(new JLabel("Test2"));
		panel.add(new JButton("Close"));
		this.setContentPane(panel);
		this.pack();
		
	}

	
	
}


Es wird ja alles nebeneinander angezeigt.
Wie positioniere ich es jetzt?
 

Fab1

Top Contributor
der Layoutmanager übernimmt das eigentlich für dich. Panel hat übrigens FlowLayout als Standardmanager somit musst du diesen nicht erst setzen.
 

Fab1

Top Contributor
Es geht hier ja um das Null-Layout.

An den TE:

setLocation(int x, int y) legt Position X/Y fest.
setBounds(int x1, int y2, int x2, int y2) legt Position X/Y + Größe X/Y fest.

das war mir durchaus bewusst, nur wird das Layout nirgends auf null gesetzt, somit kommt er damit nicht weit.

Um das zu machen, musst du das Layout der entsprechenden Komponenten auf null setzen. Zum Beispiel bei dem Panel
Java:
panel.setLayout(null)

Jetzt kannst du mit setBounds arbeiten. Aber nur in dem Panel!!!
 

ehlr

Aktives Mitglied
Entschuldigt mich, ich habe mich unpassend ausgedrückt :)

Ich habe jetzt diesen Code :

Java:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


@SuppressWarnings("serial")
public class GUI extends JFrame {
	
	private JPanel panel = new JPanel();
	private JLabel helloWorld = new JLabel("Hello World");
	private JButton closeButton = new JButton("Close");
	
	public GUI() {
		panel.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.initWindow();
		this.setSize(200,200);
		this.setTitle("Hello World");
		this.setResizable(false);
		this.setVisible(true);
	}

	public void initWindow() {
		panel.add(helloWorld);
		panel.add(closeButton);
		this.setContentPane(panel);
		this.pack();
		
		closeButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0)  {
				System.exit(0);
			}
		});
	}
}


Es soll das Label (helloWorld) und darunter den Button (closeButton) anzeigen.
Beide Komponenten werden waagerecht nebeneinander dargstellt.
Wie kann ich den Button z.B. unter das Label setzten?
 

Fab1

Top Contributor
Das Flowlayout setzt die Komponenten immer nebeneinander solange Platz ist. Also entweder machst du den Platz, also den JFrame kleiner oder du nutzt zum Beispiel das BoxLayout, dieses setzt die Komponenten untereinander in deinem Beispiel muss nur die eine Zeile abgeändert werden.

Java:
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS ));
 
V

vanny

Gast
Also zunächst finde ich den Titel amüsand "Null-Layout - Wie geht es ohne?":D

So, wenn du also nicht ohne Layout, also nicht mit Null-Layout arbeiten möchtest, wirst du mit nur einem Layoutmanager meist nicht das gewünschte Resultat erhalten.

Es ist ratsam, sich zumind. einen groben Eindruck über die verschiedenen Layoutmanager zu verschaffen und dann die Komponenten mit den jeweils geeigneten Managern zu verschachteln.

Mach einfach mal ein paar trockenübungen mit Buttons und farbigen Panels, dann haste das ganz schnell gerafft.

Gruß Vanny
 

ehlr

Aktives Mitglied
Ich bekomme das BorderLayout einfach nicht hin.
Kann bitte jemand ein einfaches Label auf Center setzen?

Java:
public class BorderLayoutTest  {
	

	
}
 

turtle

Top Contributor
Das Verschachteln verschiedener Layout scheint ja zum "normalen" Gebrauch bei Swing-Anwendungen zu gehören.

Ich nehme IMMER den jgoodies Forms-Layoutmanager von Karsten Lentzsch.

Dabei verwende ich häufig den Abeille GUI-Builder, oder den WindowBuilder in Eclipse/Indigo. Damit artet das Erstellen einer GUI nicht im verzweifelten Schachteln von Border/Flow/Gridbag-Layout, aber es wird doch sehr minimiert.
 

jgh

Top Contributor
mmmh:

Java:
JFrame f = new JFrame("Zufallszahlen");
		f.setSize(300, 300);
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JLabel l = new JLabel("Label, mittig zentriert!");
		l.setHorizontalAlignment(JLabel.CENTER);
		f.add(l);
		f.setVisible(true);
 

dehlen

Bekanntes Mitglied
Klar hier :

Java:
import java.awt.BorderLayout;

import javax.swing.BorderFactory;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JLabel;

import javax.swing.SwingUtilities;



public class Demo 

{

   private static void createGUI()

   {


      JFrame frame = new JFrame ("Test");
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      frame.setLayout (new BorderLayout());

      JPanel centerPanel = new JPanel();
      centerPanel.setBorder (BorderFactory.createEtchedBorder());
      
      JLabel label = new JLabel ("Test");
      
      centerPanel.add(label);
      frame.add (centerPanel, BorderLayout.CENTER);

      frame.setSize (410, 200);
      frame.setVisible (true);

   }



   public static void main (String[] args)

   {


      SwingUtilities.invokeLater (new Runnable()

      {

         public void run()

         {

            createGUI();

         }

      });

   }

}

Du musst eben schauen je nachdem wie deine Gui ausschauen soll musst du den passenden LayoutManager nehmen. Du kannst auch z.B dem Frame ein BorderLayout geben und im Frame liegt ein JPanel mit z.B einem FlowLayout... So lässt sich eigentlich jede Gui realisieren.

PS: Das Label erscheint nun nicht in der Mitte weil im Norden, Süden ,Westen und Osten keine anderen Komponenten liegen. Daher nimmt Center das ganze Fenster ein und das Label erscheint oben. Vom Prinzip her würde es aber so gehen ;)
 
Zuletzt bearbeitet:

jgh

Top Contributor
PS: Das Label erscheint nun nicht in der Mitte weil im Norden, Süden ,Westen und Osten keine anderen Komponenten liegen. Daher nimmt Center das ganze Fenster ein und das Label erscheint oben. Vom Prinzip her würde es aber so gehen ;)

Das ist Quatsch...zumindest teilweise! Der Grund warum das Label oben angezeigt ist, liegt im FlowLayout des
Code:
JPanel center
, das per Default das FlowLayout gesetzt hat und das beginnt nunmal oben links.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
S pack() bei null-Layout AWT, Swing, JavaFX & SWT 10
E JPanel mit Null Layout entfernt Buttons AWT, Swing, JavaFX & SWT 11
J JScrollPane & Null-Layout AWT, Swing, JavaFX & SWT 12
A JPanel mit Layout(null) in JPanel AWT, Swing, JavaFX & SWT 4
H null Layout -> Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
G Probleme mit Content bei Null-Layout verändern AWT, Swing, JavaFX & SWT 7
T Null Layout Problem. AWT, Swing, JavaFX & SWT 3
I Null-Layout-Problem AWT, Swing, JavaFX & SWT 2
M Problem mit NULL-Layout AWT, Swing, JavaFX & SWT 2
O JScrollPane beinhaltet JPanel mit null Layout kein Scrollen AWT, Swing, JavaFX & SWT 3
B NULL Layout - TextFelder verschwinden AWT, Swing, JavaFX & SWT 8
F Scrollen bei JTextArea in einem Null-Layout? Unmöglich? AWT, Swing, JavaFX & SWT 4
R Komponenten frei per Drag&Drop in (z.B.) Null-Layout bew AWT, Swing, JavaFX & SWT 2
B [Swing] Null-Layout AWT, Swing, JavaFX & SWT 2
G Scrollpane in null-Layout einfügen AWT, Swing, JavaFX & SWT 5
W Probleme mit Border- und null-Layout AWT, Swing, JavaFX & SWT 8
Z textField.getText = null AWT, Swing, JavaFX & SWT 15
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
AmsananKING Textfelder sind gleich null AWT, Swing, JavaFX & SWT 2
J Injection - Aber Controller sind null AWT, Swing, JavaFX & SWT 3
J Controller ist null - Warum AWT, Swing, JavaFX & SWT 3
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
N SceneBuilder wie auf Attribute zugreifen? Diese sind immer null. AWT, Swing, JavaFX & SWT 6
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
A Swing Null Pointer Exception obwohl Objekt initialisiert AWT, Swing, JavaFX & SWT 21
D Zwischen Null-Layouts wechseln AWT, Swing, JavaFX & SWT 2
S Unverstandene Null.PointException AWT, Swing, JavaFX & SWT 4
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
G Swing, JavaFx - Felder aus FXML sind null AWT, Swing, JavaFX & SWT 6
K Swing JSpinner mit NULL AWT, Swing, JavaFX & SWT 3
F JavaFX Properties und NULL Werte AWT, Swing, JavaFX & SWT 2
M JTextField gibt beim auslesen null aus AWT, Swing, JavaFX & SWT 9
S String is null Fehler AWT, Swing, JavaFX & SWT 2
R Swing JLabel gibt stets 'null' aus AWT, Swing, JavaFX & SWT 3
P Swing JTable null values an das Ende verschieben AWT, Swing, JavaFX & SWT 2
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
C JTable sorter GregorianCalender null Exc AWT, Swing, JavaFX & SWT 4
N Swing JFrame==null und doch nicht null?! AWT, Swing, JavaFX & SWT 4
N JButton Border(null) AWT, Swing, JavaFX & SWT 3
K Swing regexFilter() null filtern AWT, Swing, JavaFX & SWT 3
R Swing JComboBox - Null-Feld AWT, Swing, JavaFX & SWT 7
M SWT DateTime per default null Wert ? AWT, Swing, JavaFX & SWT 3
D Bild zeichnen lassen aus array, null pointer Exception AWT, Swing, JavaFX & SWT 2
G Zentrieren mittels setLocationRelativeTo(null);? AWT, Swing, JavaFX & SWT 14
G Value vom TreeCellEditor ist immer null AWT, Swing, JavaFX & SWT 3
G JTree Problem: Null Child not allowed AWT, Swing, JavaFX & SWT 12
J JList CellRenderer Null-Layoutpanel AWT, Swing, JavaFX & SWT 4
C getGraphics() liefert nur null AWT, Swing, JavaFX & SWT 4
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
S Text im JLabel wird nicht als null anerkannt AWT, Swing, JavaFX & SWT 4
P paint null pointer exception AWT, Swing, JavaFX & SWT 3
G null pointer mit getText AWT, Swing, JavaFX & SWT 2
V CellEditor der nur Eingaben int 1-9 und "null" er AWT, Swing, JavaFX & SWT 11
H getGraphics() eines JPanel liefert immer null zurück AWT, Swing, JavaFX & SWT 6
F PanelBounds an TextPaneBounds anpassen LayoutManager: Null AWT, Swing, JavaFX & SWT 2
A Null pointer exception beim Neuzeichnen AWT, Swing, JavaFX & SWT 4
M bei filechooser.showSaveDialog(null); auf Datein. zugreifen AWT, Swing, JavaFX & SWT 2
V Null Pointer Exception bei JTextField setText AWT, Swing, JavaFX & SWT 25
G JList: Anzeige von null-Werten verhindern AWT, Swing, JavaFX & SWT 3
Z createImage() liefert null zurück AWT, Swing, JavaFX & SWT 4
K JTextArea und setLayout(null) AWT, Swing, JavaFX & SWT 3
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
S Layout - Problem AWT, Swing, JavaFX & SWT 1
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
R Layered Layout AWT, Swing, JavaFX & SWT 1
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
I JavaFX - festes Layout AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
Y Layout/Ausrichtungsprobleme AWT, Swing, JavaFX & SWT 4
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
A GUI Layout AWT, Swing, JavaFX & SWT 11
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout reagiert nicht auf Constraints AWT, Swing, JavaFX & SWT 4
IsSchoGuat LayoutManager Layout-Containergrösse AWT, Swing, JavaFX & SWT 4
F GridBag Layout AWT, Swing, JavaFX & SWT 1
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben