2 JPanels im dritten JPanel anzeigen

Status
Nicht offen für weitere Antworten.

PseudoReal

Mitglied
Hi folks,

ich hab nen Problem:

ich habe 2 Klassen gemacht

ActionHeader
Anschrift


In ActionHeader befindet sich folgendes:
Ein JPanel, dass 3 Textfelder und 3 JLabels initialisiert

In Anschrift:
Auch ein JPanel, dass jeweils 8 Texfelder und Labels enthält.


Einzeln kann ich die beiden Klassen als JavaBean starten.

Die dritte klasse heisst Display.

dort wird aufgerufen

Code:
ActionHeader actionheader = new ActionHeader();
Anschrift anschrift = new Anschrift();
this.add(actionheader);
this.add(anschrift);

aber irgendwie werden diese beiden Panels nicht im 3. Pannel dargestellt.

Gruss[/code]
 
deine beiden klassen müssen JPanel implementieren!

(extends JPanel)
in den klassen dann:
this.add(deinJLabel);
 
vielleicht habe ich mich ja nicht deutlich ausgedrückt, aber die einzelnen JPanels funktionieren für sich, d.h. die Komponenten werden gezeichnet.

Es soll nun aber nen 3. Panel gezeichnet werden, dass die anderen beiden Panels beinhaltet.
 
Panels andern Panels hinzuzufügen ist absolut kein Problem.
Der Fehler liegt mir grosser warscheinlichketi bei deinen Klassen.

ich schätze mal dass deine Panel funktionieren wenn du sie in der selben klasse einem Frame zufügst. Denn sie gelten nicht als JPanel, wenn sie nicht JPanel implementieren. Auch wenn sie ein beinhalten...
 
AFAIK kann ein Panel immer nur einer Komponente bzw. einem Container zugefügt werden:

jpGross.add(panel1);
jpGross.add(panel2);
jpNochGroesser.add(panel1);

geht m.W. nicht bzw. nicht mit dem gewünschten Verhalten.

Prinzipiell ist es aber immer hilfreich, die problematische Codestelle hier zu posten.
 
class Anschrift

Code:
public class Anschrift extends JPanel {

	private JLabel L_strasse = null;
	private JLabel L_ort = null;
	private JLabel L_plz = null;
	private JLabel L_land = null;
	private JLabel L_telefon = null;
	
	String schrifttyp = "Times New Roman"; //Schriftart setzen
	int schriftgroesse = 14; //Schriftgroesse setzen
	
 	/**
	 * This is the default constructor
	 */
	public Anschrift() {
		super();
		initialize();
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private  void initialize() {
	    this.setSize(1000,500);

	    this.setLayout(null);
	    L_strasse = new JLabel();
		L_ort = new JLabel();
		L_plz = new JLabel();
		L_land = new JLabel();
		L_telefon = new JLabel();
		
				
		L_strasse.setText("Strasse");
		L_strasse.setBounds(10, 70, 120, 20);
		L_strasse.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));
		
		L_ort.setText("Ort");
		L_ort.setBounds(10, 140, 120, 20);
		L_ort.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));
		
		L_plz.setText("Postleitzahl");
		L_plz.setBounds(10, 210, 120, 20);
		L_plz.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));
		
		L_land.setText("Land");
		L_land.setBounds(10, 280, 120, 20);
		L_land.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));
		
		L_telefon.setText("Telefon");
		L_telefon.setBounds(10, 350, 120, 20);
		L_telefon.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));
		
		this.add(L_strasse, null);
		this.add(L_ort, null);
		this.add(L_plz, null);
		this.add(L_land, null);
		this.add(L_telefon, null);
	
	}
}

class ActionHeader
Code:
public class ActionHeader extends JPanel {

    private JLabel L_pernr = new JLabel();
    private JLabel L_nachname = new JLabel();
    private JLabel L_vorname = new JLabel();
    private JLabel L_datein = new JLabel();
    private JLabel L_dateout = new JLabel();
  
    String schrifttyp = "Times New Roman"; //Schriftart setzen
	int schriftgroesse = 14; //Schriftgroesse setzen
	
	/**
	 * This is the default constructor
	 */
    
	public ActionHeader() {
		super();
		initialize();
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private  void initialize() {
		this.setSize(900,200);
		this.setLayout(null);
		
		L_pernr.setText("Personalnummer");
		L_pernr.setBounds(10, 30, 120, 20);
		L_pernr.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));
		
		L_nachname.setText("Nachname");
		L_nachname.setBounds(10, 100, 120, 20);
		L_nachname.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));
		
		L_vorname.setText("Vorname");
		L_vorname.setBounds(310, 100, 120, 20);
		L_vorname.setFont(new Font(schrifttyp, Font.BOLD, schriftgroesse));

		this.add(L_pernr, null);
		this.add(L_nachname, null);
		this.add(L_vorname, null);
			
	}
}


die 3. klasse, die diese dann beinhalten soll
Code:
public class DisplayActionAnschrift extends JPanel {

	/**
	 * This is the default constructor
	 */
	public DisplayActionAnschrift() {
		super();
		initialize();
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private  void initialize() {
		this.setSize(1000,700);
		ActionHeader actionheader = new ActionHeader();
		Anschrift anschrift = new Anschrift();
		
		this.add(actionheader);
		this.add(anschrift);
		
		
		   
	}
}


hoffe es ist nun bissl verständlicher geworden
 
wieso sagst du nicht gleich dass die beiden klasse JPanel IMPLEMENTIEREN?

auf anhieb kann ich hier keinen Fehler entdecken.
fügst du DisplayActionAnschrift denn auch einem Frame du, welches du anzeigst?
wenn ja code posten
 
ne ich füge dem kein Frame zu. es wird mehrere display klassen geben, die dann alle von einem Frame aufgerufen werden, je nachdem welches benötigt wird. ich schau die mir immer als Bean an.

die display class zeigt nur nen graues Feld an!
 
Im Zweifelsfall immer dem Panel DisplayActionAnschrift einen Layoutmanager mitgeben. Mach das mal.
 
Hatte ich mir schon gedacht. Aus Faulheit/Bequemlichkeit/... wird immer wieder ohne herumprobiert und führt unweigerlich zu Darstellungsproblemen.

Hatte ich schon erwähnt, dass ich auf das GridBagLayout schwöre? *g*
 
Das JPanel hat ja standardmässig schon ein Layout, deshalb verstehe ich es nicht.
Aber es ist immer gute idee das Layout manuell einzufügen wenn etwas nicht klappt.

GridBagLayout rockt! 😀
 
also die elemente sind auf dem Panel der klasse abschnitt frauf, nur nicht auf dem gemeinsamen Panel

ich hab ja die grösse 1000, 900 fürs gesamte Panel. dann wollte ich das eine Panel

1000,300 und das andere
1000,600

aber die Elemente des 2. fehlen irgendwie...
 
vieleicht hast du einfach blos das falsche layout und es reiht die Panels nebenaneinander (flowLayout) anstatt untereinander (boxlayout);
 
ich wollte es eigentlich ohne Layout manager machen!

das problem ist wirklich dass der die einfach übermalt.
bzw das 2. this.add(anschrift) ignoriert?!
 
dann mach:
Code:
this.setLayout(null);
aber dann musst du den Panels die Position sagen:
Code:
panel1.setLocation(0,0);
panel2.setLocation(0,300);
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben