Variablen String wird nicht übergeben

Also das Buch: Meute mit Meinung kann mir gestohlen bleiben und die meisten die auch so sind auch! Früher war noch alles gut in den Foren, aber was daraus geworden ist, da sage ich nur "Nein danke!"

Vieleicht findet sich jemand der helfen kann. Ich habe jetzt was über das GridBagLayout gelesen und das BorderLayout ausprobiert. Jetzt bin ich soweit, dass ich eine Exception habe. Wer kann helfen?

Code:
Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
	at java.awt.Container.addImpl(Unknown Source)
	at java.awt.Container.add(Unknown Source)
	at XerxesInfo.<init>(XerxesInfo.java:7)
	at Xerxes.<init>(Xerxes.java:183)
	at ShockCfg.main(ShockCfg.java:77)
Java:
...
this.setLayout(new GridBagLayout());
		this.setBackground(Color.black);
		this.setForeground(Color.green);
		this.setOpaque(true);
		setVers(new JLabel(setres.getTxt().getString("InfoLabelApp")));
		this.add(getVers(), GridBagConstraints.NORTHWEST);
		getVers().setForeground(Color.green);
		getVers().setBackground(Color.black);
		setNum(new JLabel(xerxes.getVersion()));
		this.add(getNum(), GridBagConstraints.NORTHWEST);
...
 
Zuletzt bearbeitet:
soweit ich mich erinnere, kannst du nicht einfach eine GridBagConstraint.NORTHWEST dem add übergeben, sondern musst entweder eine Gridbagconstraint erstellen und diese dann beim Add übergeben, oder diese direkt bei der Komponente setzen.
 
Das ist mal ein Beispiel, wie man es machen kann. Die Contraint ist ein eigenes Objekt, keine Konstante.
Java:
		GridBagConstraints c = new GridBagConstraints();
		c.fill = GridBagConstraints.BOTH;
		c.insets = new Insets(5, 5, 5, 5);
		c.weightx = 1;
		c.weighty = 1;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.gridx = 0;
		c.gridy = 0;
		
		JPanel panel = new JPanel();
		panel.setLayout(new GridBagLayout());
		
		JComponent comp = new JPanel();
		panel.add(comp,c);
 
Danke, habe mir mit weightx und weighty geholfen.
Wie kann man zwei Zeilen nach North-West und North packen, und den Rest darunter?
 
Zuletzt bearbeitet:
also echt, wenn du schon keine Selbstinitiative zeigst formulier zumindest deine Fragen um... "ich habs schon soooo lange probiert und find keine Lösung" oder "wie ihr bis jetzt mitbekommen habt kann ich einfach nicht programmieren" ...

Es gibt für solche sachen eine echt wunderschöne Doku, die uns allen Nerven und dir Blamage erspaaren würde: GridBagLayout

Echt jetzt, stell dir mal vor dein zukünftiger Arbeitgeber sieht deine Themen, peinlich...
 
Danke für den Link. Ich habe es mit anchor probiert. FIRST_LINE_START ist aber rot unterstrichen und bringt die Exception: FIRST_LINE_START cannot be resolved to a variable.

Hier der Code:
Java:
class XerxesInfo extends JPanel
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel vers, num, auth, thx, mail, home;
	private SetRes setres;
	private Xerxes xerxes;
	private GridBagConstraints infoGBC;
	
	public XerxesInfo(SetRes setres, Xerxes xerxes)
	{
		this.setSetres(setres);
		this.setXerxes(xerxes);
		this.setLayout(new GridBagLayout());
		infoGBC = new GridBagConstraints();
		this.setBackground(Color.black);
		this.setForeground(Color.green);
		this.setOpaque(true);
		setVers(new JLabel(setres.getTxt().getString("InfoLabelApp")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 0;
	    infoGBC.anchor = FIRST_LINE_START;
		this.add(getVers(), infoGBC);
		getVers().setForeground(Color.green);
		getVers().setBackground(Color.black);
		setNum(new JLabel(xerxes.getVersion()));
		infoGBC.gridx = 1;
	    infoGBC.gridy = 0;
	    infoGBC.anchor = FIRST_LINE_START;
		this.add(getNum(), infoGBC);
		getNum().setForeground(Color.green);
		getNum().setBackground(Color.black);
		setAuth(new JLabel(setres.getTxt().getString("InfoLabelCred")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 1;
		this.add(getAuth(), infoGBC);
		getAuth().setForeground(Color.green);
		getAuth().setBackground(Color.black);
		setThx(new JLabel(setres.getTxt().getString("InfoLabelThx")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 2;
		this.add(getThx(), infoGBC);
		thx.setForeground(Color.green);
		thx.setBackground(Color.black);
		setMail(new JLabel(setres.getTxt().getString("InfoLabelMail")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 3;
		this.add(getMail(), infoGBC);
		getMail().setForeground(Color.green);
		getMail().setBackground(Color.black);
		setHome(new JLabel(setres.getTxt().getString("InfoLabelWeb")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 4;
		this.add(getHome(), infoGBC);
		getHome().setForeground(Color.green);
		getHome().setBackground(Color.black);
//by MD
		this.setBorder(BorderFactory.createLineBorder(Color.GREEN));
	}

	private Component getThx() {
		return thx;
	}

	private void setThx(JLabel thx) {
		this.thx = thx;	
	}

	public SetRes getSetres() {
		return setres;
	}

	public void setSetres(SetRes setres) {
		this.setres = setres;
	}

	public Xerxes getXerxes() {
		return xerxes;
	}

	public void setXerxes(Xerxes xerxes) {
		this.xerxes = xerxes;
	}

	public JLabel getVers() {
		return vers;
	}

	public void setVers(JLabel vers) {
		this.vers = vers;
	}

	public JLabel getNum() {
		return num;
	}

	public void setNum(JLabel num) {
		this.num = num;
	}
	public JLabel getAuth() {
		return auth;
	}

	public void setAuth(JLabel auth) {
		this.auth = auth;
	}

	public JLabel getMail() {
		return mail;
	}

	public void setMail(JLabel mail) {
		this.mail = mail;
	}

	public JLabel getHome() {
		return home;
	}

	public void setHome(JLabel home) {
		this.home = home;
	}
}
 
Dann schaue dir das Beispiel auf der verlinkten Seite genauer an, da findest du unten:
Code:
c.anchor = GridBagConstraints.PAGE_END; //bottom of space

Wichtig wäre jetzt eigentlich zu verstehen warum das so gemacht werden muss, aber da scheinst du leider lernresistent zu sein. :noe:
 
Ich glaube du weist es auch nicht!
So geht das leider nicht:
Java:
class XerxesInfo extends JPanel
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel vers, num, auth, thx, mail, home;
	private SetRes setres;
	private Xerxes xerxes;
	private GridBagConstraints infoGBC;
	
	public XerxesInfo(SetRes setres, Xerxes xerxes)
	{
		this.setSetres(setres);
		this.setXerxes(xerxes);
		this.setLayout(new GridBagLayout());
		infoGBC = new GridBagConstraints();
		this.setBackground(Color.black);
		this.setForeground(Color.green);
		this.setOpaque(true);
		setVers(new JLabel(setres.getTxt().getString("InfoLabelApp")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 0;
	    infoGBC.anchor = GridBagConstraints.FIRST_LINE_START;
		this.add(getVers(), infoGBC);
		getVers().setForeground(Color.green);
		getVers().setBackground(Color.black);
		setNum(new JLabel(xerxes.getVersion()));
		infoGBC.gridx = 1;
	    infoGBC.gridy = 0;
	    infoGBC.anchor = GridBagConstraints.FIRST_LINE_START;
		this.add(getNum(), infoGBC);
		getNum().setForeground(Color.green);
		getNum().setBackground(Color.black);
		setAuth(new JLabel(setres.getTxt().getString("InfoLabelCred")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 1;
	    infoGBC.anchor = GridBagConstraints.LINE_START;
		this.add(getAuth(), infoGBC);
		getAuth().setForeground(Color.green);
		getAuth().setBackground(Color.black);
		setThx(new JLabel(setres.getTxt().getString("InfoLabelThx")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 2;
	    infoGBC.anchor = GridBagConstraints.LINE_START;
		this.add(getThx(), infoGBC);
		thx.setForeground(Color.green);
		thx.setBackground(Color.black);
		setMail(new JLabel(setres.getTxt().getString("InfoLabelMail")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 3;
	    infoGBC.anchor = GridBagConstraints.LINE_START;
		this.add(getMail(), infoGBC);
		getMail().setForeground(Color.green);
		getMail().setBackground(Color.black);
		setHome(new JLabel(setres.getTxt().getString("InfoLabelWeb")));
		infoGBC.gridx = 0;
	    infoGBC.gridy = 4;
	    infoGBC.anchor = GridBagConstraints.LINE_START;
		this.add(getHome(), infoGBC);
		getHome().setForeground(Color.green);
		getHome().setBackground(Color.black);
//by MD
		this.setBorder(BorderFactory.createLineBorder(Color.GREEN));
	}

	private Component getThx() {
		return thx;
	}

	private void setThx(JLabel thx) {
		this.thx = thx;	
	}

	public SetRes getSetres() {
		return setres;
	}

	public void setSetres(SetRes setres) {
		this.setres = setres;
	}

	public Xerxes getXerxes() {
		return xerxes;
	}

	public void setXerxes(Xerxes xerxes) {
		this.xerxes = xerxes;
	}

	public JLabel getVers() {
		return vers;
	}

	public void setVers(JLabel vers) {
		this.vers = vers;
	}

	public JLabel getNum() {
		return num;
	}

	public void setNum(JLabel num) {
		this.num = num;
	}
	public JLabel getAuth() {
		return auth;
	}

	public void setAuth(JLabel auth) {
		this.auth = auth;
	}

	public JLabel getMail() {
		return mail;
	}

	public void setMail(JLabel mail) {
		this.mail = mail;
	}

	public JLabel getHome() {
		return home;
	}

	public void setHome(JLabel home) {
		this.home = home;
	}
}
 
Ich muss leider gestehen, dass ich keine Ahnung von diesen Constraits habe aber mich beschleicht dennoch das Gefühl, dass wir alle bescheuert sind und nur du hast den Durchblick. Seltsamerweise funktioniert bei uns alles so, wie es soll und bei dir geht gar nichts. Also bitte such den Fehler zuerst bei dir und dann bei uns.

"Geht nicht" ist keine Fehlermeldung. Beachte bitte die 6 großen Ws:
Was geht nicht.
Was soll eigentlich passieren.
Welcher Codeabschnitt soll das tun, was du beabsichtigst? (ggf. kskb)
ggf. Welche Meldung/Exception erhältst du?
Was passiert anstelle des Gewünschten?
 
naja, DU kriegst deinen Fehler nicht debugged. Also scheinst du derjenige mit dem Problem zu sein, der es nicht blickt 🙂
 
Da jetzt vermutlich keiner mehr einen Überblick über das hat, was genau dein Problem ist, beantworte doch bitte SÄMTLICHE sechs Ws, die zuvor von mir angesproch worden sind. Einschließlich kskb. Und dann füge ich sogar noch eins hinzu. Nämlich: Woran könnte es liegen? Insgesamt sind es also 7 Fragen, die du beantwortest und dann können wir dir auch wieder helfen.

EDIT: Die Idee von phash wäre auch mal was. Versuch es doch mal mit dem nullLayout.
 
Zuletzt bearbeitet:
Wozu brauche ich dein gresiges Tool? Dein Code hat mit jeder Java IDE zu funktionieren, die es gibt. Oder sehe ich so aus, als ob ich mir für jeden Code eine IDE runterladen würde?

Davon abgesehen hat dein Post aber auch gar keinen Bezug auf phashs oder meine Nachricht.
 
Ich will dir helfen aber warum versuchst du es nicht mal mit einer IDE wie zum Beispiel eclipse sondern forderst von uns, dass wir uns dein Tool runterladen und darin deinen Code ausführen?
 
Unfassbar bescheuert..da du ja das Ergebnis immer im Voraus weißt brauchst doch nix fragen?

Nebenbei hast du grade wieder fünf Posts komplett ignoriert um irgendwelchen Schwachsinn zu schreiben!
 
Ok. Bei meinen Erfahrungen mit dem GridBaglayout bin ich zu folgenden Erkenntnissen gekommen:


Die Grösse der "Bags" ist abhängig von den Grössen der einzelnen Komponenten. Hat man zB alles JLabels und alle haben die gleiche Länge und Höhe, kann man mit den anchors runspielen solange man will. Es wird sich nie etwas ändern.

Man sieht erst dann einen Effekt wenn die Label unterschiedliche Länge bzw Höhe haben. In meinem Bild sind das Label 2 und Label 3. Man sieht, dass dem Label 4 nun eine grössere Bag zur Verfügung steht. Hier macht dann auch der anchor Sinn.

Weitere Beobachtung:

Dem Label 7 steht ebenfalls eine grössere Bag zur Verfügung. Aber nur in Horizontaler Richtung (Ebenfalls bedingt durch die Länge des Label 2). Die Vertikale Höhe hängt von der Höhe des Label 6 ab. Und die ist in diesem Fall genauso gross wie die des Label 7.


Alle Angaben ohne Gewähr. Wenn jemand etwas hinzufügen möchte... Nur zu. Ich lerne gerne dazu.


Hier der Beispiel Code:
Java:
package gridbag;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

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

public class GridBagLayoutTest
{
	private JPanel content;
	private JLabel label1;
	private JLabel label2;
	private JLabel label3;
	private JLabel label4;
	private JLabel label5;
	private JLabel label6;
	private JLabel label7;
	private JLabel label8;
	
	public GridBagLayoutTest()
	{
		content = new JPanel(new GridBagLayout());
		label1 = new JLabel("Label 1");
		label1.setBackground(Color.BLUE);
		label1.setOpaque(true);
		label2 = new JLabel("Label 2 ------------------ ");
		label2.setBackground(Color.RED);
		label2.setOpaque(true);
		label3 = new JLabel("<html>Label 3<br> --------</html>");
		label3.setBackground(Color.GREEN);
		label3.setOpaque(true);
		label4 = new JLabel("Label 4");
		label4.setBackground(Color.CYAN);
		label4.setOpaque(true);
		label5 = new JLabel("Label 5");
		label5.setBackground(Color.ORANGE);
		label5.setOpaque(true);
		label6 = new JLabel("Label 6");
		label6.setBackground(Color.YELLOW);
		label6.setOpaque(true);
		label7 = new JLabel("Label 7");
		label7.setBackground(Color.WHITE);
		label7.setOpaque(true);
		label8 = new JLabel("Label 8");
		label8.setBackground(Color.DARK_GRAY);
		label8.setOpaque(true);
		
		
		JFrame j = new JFrame("GridBagLayout Test");
		j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		j.setSize(400, 300);
		j.setLocationRelativeTo(null);
		
		GridBagConstraints c;
		
		c = new GridBagConstraints();
		c.gridx = 0;
		c.gridy = 0;
		content.add(label1, c);
		
		
		c = new GridBagConstraints();
		c.gridx = 1;
		c.gridy = 0;
		content.add(label2, c);
		
		
		c = new GridBagConstraints();
		c.gridx = 0;
		c.gridy = 1;
		content.add(label3, c);
		
		
		c = new GridBagConstraints();
		c.gridx = 1;
		c.gridy = 1;
//		c.anchor = GridBagConstraints.NORTH;
		content.add(label4, c);
		
		
		c = new GridBagConstraints();
		c.gridx = 2;
		c.gridy = 1;
		content.add(label5, c);
		
		
		c = new GridBagConstraints();
		c.gridx = 0;
		c.gridy = 2;
		content.add(label6, c);
		
		
		c = new GridBagConstraints();
		c.gridx = 1;
		c.gridy = 2;
		content.add(label7, c);
		
		
		c = new GridBagConstraints();
		c.gridx = 2;
		c.gridy = 2;
		content.add(label8, c);
		
		
		
		j.add(content);
		j.setVisible(true);
	}
	
	
	
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run()
			{
				new GridBagLayoutTest();
			}
		});
	}

}

In Zeile 81 kann man den anchor des Label 4 ändern.


EDIT: Die Grössen der Komponenten (in diesem Fall JLabels) können mit Padding bzw Insets beeinflusst werden. Padding (ipadx/ipady) vergrössert die sichtbare Fläche des Labels.
Die Insets fügen dem Label einen unsichtbaren Rand hinzu. Einzeln einstellbar für oben, unten, links, und rechts.
Wie oben erwähnt hat die Änderung der Grösse keinen Einfluss darauf, ob das Label selber per anchor hin- und herverschoben werden kann... Der anchor hat nur Auswirkungen wenn die Bag grösser ist als die Komponente.
 

Anhänge

  • GridBagLayout.png
    GridBagLayout.png
    18,1 KB · Aufrufe: 44
Zuletzt bearbeitet:

Zurück
Oben