LayoutManager GridBagLayout kurz vorm Wahnsinn!

ElJarno

Bekanntes Mitglied
Hi Leute,
also eigentlich hatte ich gedacht, dass ich das GridBagLayout nun verstanden hätte bzw. unter Kontrolle habe. Falsch gedacht. Ich will mal versuchen wo das Problem liegt und dass ihr dann vielleicht diese Sinnlosigkeit an Fehler gelöst bekommt. Vielleicht bin ich wirklich total blind oder Java baut hier verdammt großen Mist, was ich eigentlich nicht glauben kann. Naja das Prblem bezieht sich lauder auf einen Großen Abschnitt an Quellcode. Ich werd mal erst eine Klasse reinstellen, vlt. reichts ja schon. Der nachfolgende Quellcode bildet mir sone Art Programmexplorer. Dieser wird auch vernünftig aufgebaut so wie ich es mir vorstelle. Diesen Explorer bette ich in ein Hauptpanel ein. Werde hier auch noch Bilder reinstellen. Problem ist hier die Methode this.buildListe(); die ich dafür nutze eine JList mit Werten zu füllen. Aktiviere ich diese Methode werden auf einmal im Hauptpanelbereiche überlappt oder ausgeblendet. Deaktiviere ich diese Methode bleibt die JList natürlich leer, aber dafür wird alles einwandfrei dargestellt. Für mich erscheint das dahingehend sinnlos da ja
1. Die Layoutmanager sich ja eigentlich garnicht gegenseitig beeinflussen dürften.
2. Wieso das befüllen des DefaultListModel die Layoutmanager beeinflusst

ich hoffe das Problem wird einigemaßen klar geschildert und euch fällt eine lösung ein. Hat vielleicht schon mal jemand ähnliche Probleme mit mehreren GridBagLayouts auf verschiedenen Ebenen gehabt?

Hauptpanel fehlerfrei dargestellt. Element rot dargestellt welche durch aktivierte Methode verschwinden:


Hauptpanel mit ausgeblendeten Elementen:


ProgrammExporer:


Java:
public class EDExplorerPanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private JTabbedPane tabbedPaneExplorer = null;
	private JPanel panelProgramme = null;
	private JPanel panelMeldungen = null;
	private JPanel panelVerlauf = null;
	private EDExplorerTrenner trennerAnwendungFavoriten;
	private JList listAnwendungFavoriten;
	private JScrollPane scrollPaneAnwendungFavoriten;
	private EDExplorerTrenner trennerFavoriten;
	private DefaultListModel listModelFavoriten;
	private JList listFavoriten;
	private JScrollPane scrollPaneFavoriten;
	private EDExplorerTrenner trennerBenutzermenue;
	private DefaultListModel listModelBenutzermenue;
	private JList listBenutzermenue;
	private JScrollPane scrollPaneBenutzermenue;
	private Vector<Color> colors;
	private Map<Object, Icon> icons;

	public EDExplorerPanel(Vector<Color> colors) {
		super();
		this.colors = colors;
		this.setLayout(new GridBagLayout());
		this.setMinimumSize(new Dimension(100, 100));
		this.setBackground(this.colors.get(3));
		this.icons = new HashMap<Object, Icon>();
		initialize();
		this.buildListe();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		panelProgramme = new JPanel();
		panelProgramme.setLayout(new GridBagLayout());
		panelVerlauf = new JPanel();
		panelVerlauf.setLayout(new GridBagLayout());
		panelMeldungen = new JPanel();
		panelMeldungen.setLayout(new GridBagLayout());
		tabbedPaneExplorer = new JTabbedPane();
		tabbedPaneExplorer.addTab(null, IconLoader.loadIcon(IconLoader.ICON_PROGRAMME, 25, 25),
				panelProgramme, "Programme");
		tabbedPaneExplorer.addTab(null, IconLoader.loadIcon(IconLoader.ICON_VERLAUF, 25, 25),
				panelVerlauf, "Verlauf");
		tabbedPaneExplorer.addTab(null, IconLoader.loadIcon(IconLoader.ICON_MELDUNGEN, 25, 25),
				panelMeldungen, "Meldungen");

		trennerAnwendungFavoriten = new EDExplorerTrenner("Anwendungsbezogene Favoriten",
				this.colors.get(3));
		trennerAnwendungFavoriten.getButtonMinimieren().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (trennerAnwendungFavoriten.getButtonMinimieren().isSelected()) {
					scrollPaneAnwendungFavoriten.setVisible(false);
					revalidate();
				} else {
					scrollPaneAnwendungFavoriten.setVisible(true);
					revalidate();
				}

			}
		});

		listAnwendungFavoriten = new JList();
		listAnwendungFavoriten.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listAnwendungFavoriten.setBackground(this.colors.get(4));
		listAnwendungFavoriten.setDragEnabled(true);
		scrollPaneAnwendungFavoriten = new JScrollPane();
		scrollPaneAnwendungFavoriten.setViewportView(listAnwendungFavoriten);

		trennerFavoriten = new EDExplorerTrenner("Favoriten", this.colors.get(3));
		trennerFavoriten.getButtonMinimieren().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (trennerFavoriten.getButtonMinimieren().isSelected()) {
					scrollPaneFavoriten.setVisible(false);
					revalidate();
				} else {
					scrollPaneFavoriten.setVisible(true);
					revalidate();
				}

			}
		});

		listModelFavoriten = new DefaultListModel();
		listFavoriten = new JList(listModelFavoriten);
		listFavoriten.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listFavoriten.setCellRenderer(new IconListRenderer(icons));
		listFavoriten.setBackground(this.colors.get(4));
		scrollPaneFavoriten = new JScrollPane();
		scrollPaneFavoriten.setViewportView(listFavoriten);

		DropTarget dropTarget = new DropTarget(listFavoriten, new DropTargetAdapter() {
			public void drop(DropTargetDropEvent dtde) {
				try {
					Transferable tr = dtde.getTransferable();

					if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
						dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
						String data = (String) tr.getTransferData(DataFlavor.stringFlavor);
						// Sind in der Quelliste mehrere Elemente ausgewählt, so
						// werden diese in
						// einem String übertragen. Trennzeichen ist dann der
						// Zeilenvorschub.
						StringTokenizer tokens = new StringTokenizer(data, "\n");
						while (tokens.hasMoreTokens()) {
							listModelFavoriten.addElement(tokens.nextToken());
						}
						listAnwendungFavoriten.updateUI();
						dtde.getDropTargetContext().dropComplete(true);
					} else {
						System.err.println("DataFlavor.stringFlavor is not supported, rejected");
						dtde.rejectDrop();
					}
				} catch (IOException ex) {
				} catch (UnsupportedFlavorException ex) {
					System.err.println("UnsupportedFlavorException");
					ex.printStackTrace();
					dtde.rejectDrop();
				}
			}
		});

		trennerBenutzermenue = new EDExplorerTrenner("Benutzermenü", this.colors.get(3));
		trennerBenutzermenue.getButtonMinimieren().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (trennerBenutzermenue.getButtonMinimieren().isSelected()) {
					scrollPaneBenutzermenue.setVisible(false);
					revalidate();
				} else {
					scrollPaneBenutzermenue.setVisible(true);
					revalidate();
				}

			}
		});

		listModelBenutzermenue = new DefaultListModel();
		listBenutzermenue = new JList(this.listModelBenutzermenue);
		listBenutzermenue.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listBenutzermenue.setCellRenderer(new IconListRenderer(icons));
		listBenutzermenue.setBackground(this.colors.get(4));
		listBenutzermenue.setDragEnabled(true);
		scrollPaneBenutzermenue = new JScrollPane();
		scrollPaneBenutzermenue.setViewportView(listBenutzermenue);

		this.addComponent(this, tabbedPaneExplorer, GridBagConstraints.BOTH,
				GridBagConstraints.NORTHWEST, new Insets(0, 0, 0, 0), 0, 0, 1, 1, 1, 1);
		this.addComponent(panelProgramme, trennerAnwendungFavoriten, GridBagConstraints.BOTH,
				GridBagConstraints.NORTHWEST, new Insets(0, 0, 0, 0), 0, 0, 1, 1, 1, 0);
		this.addComponent(panelProgramme, scrollPaneAnwendungFavoriten, GridBagConstraints.BOTH,
				GridBagConstraints.NORTHWEST, new Insets(0, 0, 0, 0), 0, 1, 1, 1, 1, 1);
		this.addComponent(panelProgramme, trennerFavoriten, GridBagConstraints.BOTH,
				GridBagConstraints.NORTHWEST, new Insets(0, 0, 0, 0), 0, 2, 1, 1, 1, 0);
		this.addComponent(panelProgramme, scrollPaneFavoriten, GridBagConstraints.BOTH,
				GridBagConstraints.NORTHWEST, new Insets(0, 0, 0, 0), 0, 3, 1, 1, 1, 1);
		this.addComponent(panelProgramme, trennerBenutzermenue, GridBagConstraints.BOTH,
				GridBagConstraints.NORTHWEST, new Insets(0, 0, 0, 0), 0, 4, 1, 1, 1, 0);
		this.addComponent(panelProgramme, scrollPaneBenutzermenue, GridBagConstraints.BOTH,
				GridBagConstraints.NORTHWEST, new Insets(0, 0, 0, 0), 0, 5, 1, 1, 1, 1);
	}

	private void buildListe() {
		listModelBenutzermenue.addElement("Erfassung");
		icons.put("Erfassung", IconLoader.loadIcon(IconLoader.ICON_ERFASSUNG, 25, 25));
	}

	private void addComponent(Container container, Component component, int fill, int anchor,
			Insets insets, int x, int y, int width, int height, double weightx, double weighty) {
		GridBagConstraints constraints = new GridBagConstraints();
		constraints.fill = fill;
		constraints.anchor = anchor;
		constraints.insets = insets;
		constraints.gridx = x;
		constraints.gridy = y;
		constraints.gridwidth = width;
		constraints.gridheight = height;
		constraints.weightx = weightx;
		constraints.weighty = weighty;

		container.add(component, constraints);
	}

	public JList getListBenutzermenue() {
		return listBenutzermenue;
	}
}

Gruß Jan:)
 

ElJarno

Bekanntes Mitglied
Oke hab gefunden an welcher Stelle genau der Fehler passiert. Es liegt an dem CellRenderer von der JList. Wenn ich Zeile 169 auskommentiere funktioniert alles wunderbar, nur wird dann beim JList-Element kein Icon mehr angezeigt. Hat jemand vielleicht ne Idee worans liegt dass der der CellRenderer da so Probleme macht. Hier mal die CellRenderer-Klasse:

Java:
public class IconListRenderer extends DefaultListCellRenderer {

	private Map<Object, Icon> icons = null;

	public IconListRenderer(Map<Object, Icon> icons) {
		this.icons = icons;
	}

	public Component getListCellRendererComponent(JList list, Object value, int index,
			boolean isSelected, boolean cellHasFocus) {

		JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected,
				cellHasFocus);

		Icon icon = icons.get(value);

		label.setIcon(icon);
		return label;
	}
}
Vielleicht habt ihr mir ja auch en Tip geben wie man alternativ Icons in JList bekommt.

Gruß Jan
 

Michael...

Top Contributor
bzw. soll angezeigt werden
In Deinem Renderer wird nur ein Icon gesetzt.

Verwende doch einfach eigene Objekte und stecke die in die JList bzw. deren Model:
Java:
class MyListObject {
     private Icon icon;
     private String text;

     public MyListObject(String text, Icon icon) {
          this.text = text;
          this.icon = icon;
     }

     public String getText() {
          return text;
     }

     public Icon getIcon() {
          return icon;
     }
}

Der Renderer könnte dann so aussehen:
Java:
public class IconListRenderer extends DefaultListCellRenderer {
 
    public Component getListCellRendererComponent(JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        MyListObject mo = (MyListObject)value;
        this.setText(mo.getText());
        this.setIcon(mo.getIcon());
        return this;
    }
}

Achtung Code ist ohne Editor geschrieben - alles ohne Gewähr!!
 

ElJarno

Bekanntes Mitglied
Zu dir Michael:
In Deinem Renderer wird nur ein Icon gesetzt.

Verwende doch einfach eigene Objekte und stecke die in die JList bzw. deren Model:

Hab grad mal deine Methode ausprobiert. Funktioniert aber der lässt schon wieder die Flächen verschwinden. Ich raffs nicht. Wie kann man son sch* LayoutManager Konzipieren.

Zu dir HobbyProgger:
Cooler Link:D

Nur wie binde ich denn diese Jars in meine Bibliothek ein. Der will immer noch en root verzeichnis haben. Keine ahnung wie man das macht.

Gruß Jan
 

Michael...

Top Contributor
Welche Flächen verschwinden. Die Darstellung der JList hat doch nichts mit dem LayoutManager zu tun, der gibt ja nur vor wo und wie die Komponenten positioniert werden.
 

ElJarno

Bekanntes Mitglied
Wie oben in den anghängten Bildern. Wofür schreib ich dat denn hier???:L.

Naja habs grad noch mal überprüft Wenn man das Hauptfenster gruß genug zieht erscheinen die Flächen wieder. Ergibt nur irgendwie keinen Sinn da ich alle min.sizes weggelassen hab was das evtl beeinflussen könnten. Außerdem bewrikt die Grafik ja nicht wirklich eine größenänderung im Fenster. Schau dir einfach mal die JPEGs an die oben stehen. Dann siehse was ich mein und wo mein Problem liegt.

Hab vorhin das Problem mal mit dem BorderLayout versucht zu lösen in dem ich die einzelnen Elemente einfach in mehrere Panels schachtel. Funktioniert aber beim resizen ruckeln die elemente mittlerweile ziemlig heftig, also anscheinend sehr unperformant. Gibts da en trick?

Gruß Jan
 
H

HobbyProgger

Gast
Nur wie binde ich denn diese Jars in meine Bibliothek ein. Der will immer noch en root verzeichnis haben. Keine ahnung wie man das macht.
* Hole dir die entsprechende jar von hier:
https://tablelayout.dev.java.net/se...folderID=3487&expandFolder=3487&folderID=3487
(ich vermute mal "Binary Jdk 1.5")

* Kopiere die jar in einen Ordner (z. B. "lib") in deinem Projekt

* Klicke mit rechts auf dein Projekt, wähle Properties -> Java Build Path -> Libraries
dort fügst du die Bibliothek über die Schaltfläche "Add JARs..." deinem Projekt hinzu.

Für einfache Dinge verwende ich BorderLayout, für spezielle Sachen auch mal OverlayLayout, oder ggf. auch mal CardLayout - ansonsten verwende ich jetzt immer TableLayout. Den ganzen Grid- und GridBag-Scheiß kannst du getrost in die Tonne stoßen! :D

Ob es aber bei deinem Problem hilft, kann ich nicht sagen - probieren würde ich es auf jeden Fall einmal.
 

ElJarno

Bekanntes Mitglied
Jo stimmt,
stand mal wieder aufen schlauch. Hab versucht die Jar als JDK Bibliothek einzubinden. Is ja quatsch.:oops:.

Hab grad mal den Bericht aus dem Javamagazin zu dem TableLayout gelesen. Hört sich super an. Hast du vielleicht noch ne gute Doku zu dem OverlayLayout, den kannte ich bis jetzt noch garnicht. Und mit dem Cardlayout kann ich doch noch nur eine Componente auf eine ganze Fläche skallieren und dabei aber mehrer Übereinander oder?

Gruß Jan
 
H

HobbyProgger

Gast
Hast du vielleicht noch ne gute Doku zu dem OverlayLayout
Auf der TableLayout-Seite, welche ich dir verlinkt habe, sind zwei Tutorials zu finden (Part 1 und Part 2).
Mir hat Part 1 schon gereicht, um meine einfachen Sachen zu machen:
https://tablelayout.dev.java.net/articles/TableLayoutTutorialPart1/TableLayoutTutorialPart1.html

Beispiel, wie man ein einem JPanel (buttonPanel) zwei Schaltflächen (z. B. "Ok" und "Abbrechen") mit kleiner Lücke zentriert positioniert:
Java:
		// Layout:		   |--------------- Column ---------------|  |-------- Row --------|
		double size[][] = {{TableLayout.FILL, 10, TableLayout.FILL}, {TableLayout.PREFERRED}};
		buttonPanel.setLayout( new TableLayout(size) );
		// Add controls     "C,R"
		buttonPanel.add( jButton1, "0,0, r,c" );
		buttonPanel.add( jButton2, "2,0, l,c" );

Und mit dem Cardlayout kann ich doch noch nur eine Componente auf eine ganze Fläche skallieren und dabei aber mehrer Übereinander oder?
Ja, ist so eine Art MultiPage - nur ohne Tabs... eignet sich gut für Wizzards und der gleichen.
 

ElJarno

Bekanntes Mitglied
Hi HobbyProgger,
schon mal was von dem MigLayout gehört?
MiG Layout Java Layout Manager for Swing and SWT
Bzw. was hälts du von diesem. Hört sich alles auch nicht schlecht an.
Auf der TableLayout-Seite, welche ich dir verlinkt habe, sind zwei Tutorials zu finden (Part 1 und Part 2).
Ne ich meinte doch zum OverlayLayout, aber so wie ich das jetzt sehe ist das auch sone art CardLayout oder? Wäre dann jetzt nicht so wichtig.

Hast du mal den verlinkten Artikel vom Javamagazin auf deiner Seite gelesen . Erklärt das TableLayout auch sehr gut. Schade, dass die den Workshop, den die am Ende erwähnen, nicht auch noch online gestellt haben.
 

ElJarno

Bekanntes Mitglied
Das GridBagLayout kann nahezu alle Design-Lösungen umsetzen. Auch wenn es Einsteigern schwer fällt, sich an die Arbeit mit ihm zu gewöhnen, bzw. es zu verstehen.
Ich musste noch nie einen externen (nicht im JDK befindlichen) LayoutManager benutzen.

Das stimmt wohl. Hatte es mit dem GridBagLayout ja auch so hinbekommen wie ich wollte. Nur gabs dann wie oben beschrieben arge Probleme. Es lag vor allendingen an den ganzen Min Max und Pref-Sizes.
Aber warum kompliziert wenns auch einfacher geht. Is ja schon schlimm genug, dass wir immer noch das ganze Design zu fuß programmieren müssen. Siehe .Net und Visual Studio.
Von daher ist der TableManager schon ne echte erleichterung wollte eigentlich mich auch nur auf die Manager vom JDK beschränken. Doch wie du oben in meinen Bilder sieht gibts doch einige Probleme, besonders wenn man das Hauptfenster verkleinert. Das hab ich mit den TableLayout bis jetzt nicht. Zudemm scheint das Resizen nun viel Performanter von der Hand zu gehen. Und man kann mehrere Componenten auch noch überlagern ohne jetzt verschachteltes Layouts zu erstellen.

Gruß Jan
 
H

HobbyProgger

Gast
Hallo ElJarno.

schon mal was von dem MigLayout gehört?
MiG Layout Java Layout Manager for Swing and SWT
Bzw. was hälts du von diesem. Hört sich alles auch nicht schlecht an.
Nein, dass kannte ich bisher noch nicht. Ich habe auch noch nicht allzu viel mit dem TableLayout gemacht (nur paar kleine Dinge mit wenigen Panels, wo aber das BorderLayout schon ausschied!), um da eine Einschätzung geben zu können. Eigentlich müsste man mal eine komplizierte Oberfläche mit beiden Managern umsetzen und dann alle Vor- und Nachteile gegenüberstellen... Hast du Lust? ;)

Ne ich meinte doch zum OverlayLayout, aber so wie ich das jetzt sehe ist das auch sone art CardLayout oder? Wäre dann jetzt nicht so wichtig.
Entschuldigung, da habe ich falsch gelesen. Das OverlayLayout bietet die Möglichkeit eine Komponente über eine andere zu legen (auch nur teilweise möglich). Ich habe dies gerade verwendet, um in einem Projekt ein kleines Vorschaufenster in die rechte untere Ecke zu bekommen.

Hast du mal den verlinkten Artikel vom Javamagazin auf deiner Seite gelesen . Erklärt das TableLayout auch sehr gut. Schade, dass die den Workshop, den die am Ende erwähnen, nicht auch noch online gestellt haben.
Ich hatte ihn angelesen, es aber dann doch vorgezogen, lieber durch praktische Anwendung zu lernen. :)

Ich habe bisher nur kleinere Dinge realisiert - da ging aber alles supereinfach in wenigen Zeilen und der Manager hat auch immer gleich das gemacht, was er tun sollte. (was man bei GridBag nicht behaupten kann!)

Das GridBagLayout kann nahezu alle Design-Lösungen umsetzen. Auch wenn es Einsteigern schwer fällt, sich an die Arbeit mit ihm zu gewöhnen, bzw. es zu verstehen.
Du kannst es drehen und wenden wie du willst - GridBag ist ein Epic FAIL!
Auch wenn du gerne viele Stunden darauf verwendest, verhältnis wenige GUI-Elemente zu programmieren - deinen Kode sollten dann vlt. auch mal andere noch lesen können... Wo man beim TableLayout übersichtlichen 4 Zeilen benötigt, braucht es beim GridBagLayout schätzungsweise kryptische 20 Zeilen. > Der Vorteil liegt meines Erachtens auf der Hand!

Sun/Oracle sollte das TableLayout (oder aber das MiGLayout, wenn dieses noch besser ist) in den Java-Standard aufnehmen und die überflüssigen LayoutManager als deprecated ausweisen.

Nur gabs dann wie oben beschrieben arge Probleme. Es lag vor allendingen an den ganzen Min Max und Pref-Sizes.
Ja, ich hatte auch mal eine Seitenleiste mit GridBag gemacht: beim Verkleinern des Fensters hat es eine Komponente nach rechts verschoben und weil dort auch kein Platz war dies solange wiederholt, bis mein komplettes Fenster grau war. - Mit dem TableLayout hat es von Anfang an ohne solche Probleme funktioniert. Ich musste auch keine Änderungen an den Komponenten vornehmen (Min, Max & Pref.-Sizes).

Aber warum kompliziert wenns auch einfacher geht.
lol, genauso sieht's aus! :D

Is ja schon schlimm genug, dass wir immer noch das ganze Design zu fuß programmieren müssen.
Absolute Zustimmung! Für umfangreiche Dialoge, welche fast vollkommen statisch sind und auch keine Größenänderung erlauben ergibt es einfach keinen Sinn, nicht auf einen visuellen Editor zu setzen.
Es ist schon ziemlich schwach von der Java-Gemeinde, dass es hier nichts gutes gibt.

PS: man kann hierfür z. B. den Editor von Netbeans verwenden - dieser ist aber mehr als nur schlecht:
- stürtzt gerne mal komplett ab
- die Komponenten springen hin und her, wie sie gerne möchten
- ich konnte selbst nach intensiverer Suche einige Komponenten-Eigenschaften nicht ändern
- die Undo-Funktion geht oftmals nicht!
- wenn man aus Versehen den falschen LayoutManager einstellt, zerschießt man sich gleich mal stundenlange Arbeit (siehe fehlende Undo-Funktion)

=> Wenn hier jemand eine Alternative kennt, bitte mitteilen!!! :)

Von daher ist der TableManager schon ne echte erleichterung wollte eigentlich mich auch nur auf die Manager vom JDK beschränken.
Ja, zusätzliche Bibliotheken einbinden ist nicht so komfortabel, mache ich auch immer nicht so gerne. - Daher sollte man mal einen ordentlichen Manager dem Standard hinzufügen (und am besten gleich noch einen richtig guten visuellen Editor!).

Doch wie du oben in meinen Bilder sieht gibts doch einige Probleme, besonders wenn man das Hauptfenster verkleinert. Das hab ich mit den TableLayout bis jetzt nicht. Zudemm scheint das Resizen nun viel Performanter von der Hand zu gehen. Und man kann mehrere Componenten auch noch überlagern ohne jetzt verschachteltes Layouts zu erstellen.
Bis auf die Sache mit der Geschwindigkeit (da habe ich noch nicht so drauf geachtet) kann ich diese Erfahrung zu 100% bestätigen. :)

Gruß!
 

ElJarno

Bekanntes Mitglied
Nein, dass kannte ich bisher noch nicht. Ich habe auch noch nicht allzu viel mit dem TableLayout gemacht (nur paar kleine Dinge mit wenigen Panels, wo aber das BorderLayout schon ausschied!), um da eine Einschätzung geben zu können. Eigentlich müsste man mal eine komplizierte Oberfläche mit beiden Managern umsetzen und dann alle Vor- und Nachteile gegenüberstellen... Hast du Lust?

Hm ne Überlegung wert, aber im moment einfach keine Zeit für sowas.Sorry. Aber die in meinen Bildern dargestellte GUI ist jetzt komplett TableModel. Hab mir die FAQ von MgiLayout durchgelesen. Der ist meines erachtens nach ne Erweiterung vom TableLyout bietet halt noch so spielerein wie ComponentSize,Insets,Docking,API Creation:
http://www.miglayout.com/QuickStart.pdf
Also im Prinzip noch ein paar mehr Funktionen aus dem GridBagLayout. Braucht man aber nicht unbedingt finde ich, zumindest nicht beim obigen Beispiel.

Sun/Oracle sollte das TableLayout (oder aber das MiGLayout, wenn dieses noch besser ist) in den Java-Standard aufnehmen und die überflüssigen LayoutManager als deprecated ausweisen.

Bug ID: 6530906 Add MiG Layout to the JDK

=> Wenn hier jemand eine Alternative kennt, bitte mitteilen!!!

=>JFormDesigner
hab den mal Angetestet und is nich schlecht. Beherscht auch TableLayout und andere. Kostet nach 20 Tagen aber was glaub ich, oder hab ich falsch verstanden;).

Bis auf die Sache mit der Geschwindigkeit (da habe ich noch nicht so drauf geachtet) kann ich diese Erfahrung zu 100% bestätigen.

Durch das mehrmalige Verschachteln und der Einbindung vonr rel. Großen Grafiken geriet das JFrame beim resizen auf beiden Ebenen schon arg ins ruckeln. Beim TableLayout brauchte ich bloß ein einziges Panel fürs Hauptlayout
=> Weniger Ruckeln:toll:

Gruß Jan
 
G

greye

Gast
=>JFormDesigner
hab den mal Angetestet und is nich schlecht. Beherscht auch TableLayout und andere. Kostet nach 20 Tagen aber was glaub ich, oder hab ich falsch verstanden;).

Nee, das hast Du richtig verstanden. Die wollen dann Geld sehen :)

Ich teste ihn auch grade, bin mir aber nicht sicher, ob er mir soviel besser gefällt als der Editor von IDEA, daß ich dafür ca. 150 Euro ausgeben möchte :)

42m
 

L-ectron-X

Gesperrter Benutzer
Du kannst es drehen und wenden wie du willst - GridBag ist ein Epic FAIL!
Auch wenn du gerne viele Stunden darauf verwendest, verhältnis wenige GUI-Elemente zu programmieren - deinen Kode sollten dann vlt. auch mal andere noch lesen können... Wo man beim TableLayout übersichtlichen 4 Zeilen benötigt, braucht es beim GridBagLayout schätzungsweise kryptische 20 Zeilen. > Der Vorteil liegt meines Erachtens auf der Hand!
Solche Anworten kommen von Leuten, die wahrscheinlich noch weniger mit GridBagLayout gemacht haben als mit TableLayout und nur irgendein Geschwafel nachplappern.

und die überflüssigen LayoutManager als deprecated ausweisen.
Das ist Unfug - auch nur eine Laien-Meinung... :eek:

Jeder, der vorgestellten LayoutManager hat Vor-und Nachteile, welche es zu kennen gilt, wenn man gute GUIs programmieren will.
 

ElJarno

Bekanntes Mitglied
Jeder, der vorgestellten LayoutManager hat Vor-und Nachteile, welche es zu kennen gilt, wenn man gute GUIs programmieren will.
Und welche haben dann z.B das Grid oder Gridbaglayout was sie jetzt im Gegensatz zu den nicht JDK-Layouts besser darstehen lassen?
 
G

Gast2

Gast
Persönlich find ich das FormLayout von JGoodies sehr angenehm und gut druchdacht
JGoodies :: Forms
Die Idee mit einem programatischen GuiBuilder gefällt mir und so bleibt der Code sehr übersichtlich und darüber hinaus bietet er einige nützlichen Methoden für das Layout
 

L-ectron-X

Gesperrter Benutzer
Und welche haben dann z.B das Grid oder Gridbaglayout was sie jetzt im Gegensatz zu den nicht JDK-Layouts besser darstehen lassen?
Sie sind einfach zu benutzen und man braucht keine externen Sourcen einbinden.

Die Idee mit einem programatischen GuiBuilder gefällt mir und so bleibt der Code sehr übersichtlich und darüber hinaus bietet er einige nützlichen Methoden für das Layout
Das alles geht mit Matisse, dem GUI-Builder von Netbeans auch - und zwar mit JEDEM LayoutManager aus dem JDK.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S GridBagLayout Felder formatieren AWT, Swing, JavaFX & SWT 1
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
C GridbagLayout verstehen lernen AWT, Swing, JavaFX & SWT 1
H GridBagLayout macht mich wahnsinnig :-( AWT, Swing, JavaFX & SWT 5
BabySuna darstellungsprobleme mit JTabbedPane und GridBagLayout AWT, Swing, JavaFX & SWT 8
CptK Positionieren von Elementen in GridBagLayout AWT, Swing, JavaFX & SWT 4
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
Mario1409 AWT GridBagLayout AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
K GridBagLayout mit reponsive Design AWT, Swing, JavaFX & SWT 2
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
T GridBagLayout Anfängerprobleme AWT, Swing, JavaFX & SWT 3
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
L GridBagLayout Anordnung AWT, Swing, JavaFX & SWT 3
M Gridbaglayout Spaltenbreite AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
V GridBagLayout AWT, Swing, JavaFX & SWT 4
N LayoutManager GridBagLayout - Grundlagen AWT, Swing, JavaFX & SWT 6
Neumi5694 Swing Gridbaglayout - automatische Anpassung verhindern AWT, Swing, JavaFX & SWT 1
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
M Swing GridBagLayout Komponentengröße festsetzen AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
HarleyDavidson Swing Seltsames Verhalten GridBagLayout AWT, Swing, JavaFX & SWT 11
W GridBagLayout mit fester Zellgrösse AWT, Swing, JavaFX & SWT 2
N Swing GridBagLayout: Ein Pixel Versatz AWT, Swing, JavaFX & SWT 2
B Swing Gridbaglayout unterschiedliche Zeilenhöhe AWT, Swing, JavaFX & SWT 6
H LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 1
N GridBagLayout - was fehlt? AWT, Swing, JavaFX & SWT 8
S Swing rowHeight und rowWeight im GridBagLayout AWT, Swing, JavaFX & SWT 1
N Swing GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 4
A jpanel mit gridbaglayout auf hintergrundbild AWT, Swing, JavaFX & SWT 7
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
G GridBagLayout AWT, Swing, JavaFX & SWT 6
S GridBagLayout "links-rechts-layouten" AWT, Swing, JavaFX & SWT 7
T LayoutManager GridBagLayout / erwartetes Raster fehlt AWT, Swing, JavaFX & SWT 3
X Gridbaglayout gridx + gridy auslesen? AWT, Swing, JavaFX & SWT 7
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
N GridBagLayout - Zeitplan AWT, Swing, JavaFX & SWT 13
N Swing GridbagLayout AWT, Swing, JavaFX & SWT 4
S Swing gridbaglayout AWT, Swing, JavaFX & SWT 8
G GridBagLayout Problem AWT, Swing, JavaFX & SWT 4
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
X LayoutManager gridBagLayout wird nicht richtig Dargestellt AWT, Swing, JavaFX & SWT 5
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
N LayoutManager GridBagLayout schummeln erlaubt ? AWT, Swing, JavaFX & SWT 2
D GridBagLayout AWT, Swing, JavaFX & SWT 9
A Swing GridBagLayout - constraints.anchor scheint nicht korrekt zu funktionieren? AWT, Swing, JavaFX & SWT 7
J Swing Terminkalender Wochenansicht mit Gridbaglayout oder JTable AWT, Swing, JavaFX & SWT 16
C LayoutManager GridBagLayout - Anfängerfrage AWT, Swing, JavaFX & SWT 5
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
R GridBagLayout in GridBagLayout AWT, Swing, JavaFX & SWT 2
H Positionierungsprobleme beim GridBagLayout AWT, Swing, JavaFX & SWT 16
Furtano AWT GridBagLayout macht mir Sorgen AWT, Swing, JavaFX & SWT 3
A GridbagLayout positionierungsproblem AWT, Swing, JavaFX & SWT 4
earlgrey_tea GridBagLayout Componenten proportional vergößern AWT, Swing, JavaFX & SWT 12
D JTable im GridBagLayout -> gridwidth AWT, Swing, JavaFX & SWT 6
T GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
D Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 8
J Swing GridBagLayout: Links-nach-rechts Orientierung statt zentriert AWT, Swing, JavaFX & SWT 12
R Größe eines Labels bei GridBagLayout festlegen AWT, Swing, JavaFX & SWT 9
B GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 11
E LayoutManager GridBagLayout in BorderLayout - Abstand bei Resizing AWT, Swing, JavaFX & SWT 2
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
N GridBagLayout Problem AWT, Swing, JavaFX & SWT 6
C Swing JTable "zerstört" GridBagLayout AWT, Swing, JavaFX & SWT 9
N LayoutManager GridBagLayout Größe fixieren AWT, Swing, JavaFX & SWT 3
M GridBagLayout AWT, Swing, JavaFX & SWT 7
V Swing Gridbaglayout Leeres Fenster AWT, Swing, JavaFX & SWT 2
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
N GridBagLayout AWT, Swing, JavaFX & SWT 11
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
Y Swing GridbagLayout JTextfield zu klein AWT, Swing, JavaFX & SWT 5
L LayoutManager GridBagLayout spielt verrückt AWT, Swing, JavaFX & SWT 9
T LayoutManager GridBagLayout an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 2
J Java GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 3
Y LayoutManager Problem mit Gridbaglayout AWT, Swing, JavaFX & SWT 8
hdi LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 9
W GridBagLayout Falsche Größenanpassung AWT, Swing, JavaFX & SWT 6
R Swing Button-Größe in JPanel mit GridBagLayout nicht änderbar AWT, Swing, JavaFX & SWT 3
E Problem mit meiner GUI/GridbagLayout AWT, Swing, JavaFX & SWT 2
M LayoutManager GradientPaint auf GridBagLayout AWT, Swing, JavaFX & SWT 5
D LayoutManager GridBagLayout, Änderung zur Laufzeit AWT, Swing, JavaFX & SWT 4
G LayoutManager per Button GridBagLayout + Inhalt ändern AWT, Swing, JavaFX & SWT 2
M GridBagLayout zeilenweise füllen AWT, Swing, JavaFX & SWT 5
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
hdi Swing Problem mit GridBagLayout AWT, Swing, JavaFX & SWT 2
P Swing GridBagLayout bleibt nicht so wie es ist :( AWT, Swing, JavaFX & SWT 8
M gridbaglayout - abstand bei label und field AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben