JPanels in JPanel
Ich habe ein problem mit Java JPanels. Ich würde gerne 2 JPanels mit verschiedenen layouts in ein JPanel, das ist auch ein layout. Ist es überhaupt möglich zu machen, damit es funktioniert?
BibP()
setLayout(new GridLayout(5, 1)); //The big JPanel
add(new A(), new FlowLayout(4));
add(new B(), new GridLayout(7,2));
A-und B-Klassen erweitert, die als JPanels und egal, was ich verändert oder kommentiert B erscheint immer in der 1 Reihe.
Ich habe 4 Elemente Hinzugefügt, um A und 14 B (JLabels und JTextAreas) und es ist nicht viel code in Ihnen nur die Hinzugefügt und ein paar Berechnungen.
Könnte das problem in den JFrame, wo ich bin und versuchen, das große JPanel.
JFrame.this.add(new BigP(),BorderLayout.CENTER);
Edit:
public class BigP extends JPanel{
//Labels and TextAres
public class A extends JPanel{
public A(){
setBorder(new EmptyBorder(0, -50, 0, 0));
//get date and add to textareas
//add the label and textareas
}
}
public class B extends JPanel{
public B (){
setBorder(new EmptyBorder(0, -50, 0, 0));
setBackground(Color.red);
//colum longs for text areas less then 5
//add labels and textareas
}
}
public BigP(){
setLayout(new GridLayout(5, 1));
setBorder(new EmptyBorder(3,-160,0,0));
add(new A(), new FlowLayout(4));
add(new B(), new GridLayout(7,2));
}
}
Danke für die Hilfe.
Nach ein paar versuchen:
Wenn ich diese verwendet:
add(new B(), new GridLayout(7,2));
Bekomme ich diese in B, wenn ich printlned layout:
java.das awt.FlowLayout[hgap=5,vgap=5 align=center]
Wenn ich das Layout in B:
setLayout(new GridLayout(7, 2));
Die information ist richtig:
java.das awt.GridLayout[hgap=0,vgap=0,Zeilen=7,cols=2]
Aber es gibt nur 2 JTextAreas vissible wo sollte 14 Elemente.
- Der code scheint zu fehlen wichtige Teile. Wenn ich es mental, dann sieht alles gut aus. Können Sie bitte sicherstellen, dass Sie eingegeben genau was Sie haben. Offensichtlich gibt es ein problem mit ihm.
- Ich bearbeitet den code.
- Für bessere Hilfe früher, nach einem SSCCE.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist allgemein wissen, wie verknüpfte layouts.
Das problem, das Sie haben ist, die Sie versuchen zu liefern, die
Layout
s als Hemmnis für den aktuellen Container layout-manager (der in Ihrem Fall, Ihr Glück es war nicht zu erwarten, dass jede)...Stattdessen liefern Sie den layout-manager direkt an das Kind-panels...so etwas wie...
Werfen Sie einen Blick auf Auslegen von Komponenten Innerhalb eines Containers für mehr details...
Update mit Beispiel
Einfachen lauffähigen Beispiel, die Verwendung von Etiketten als Platzhalter.
Diese
setBorder(new EmptyBorder(3,-160,0,0));
auch falsch aussieht.EmptyBorder
sollte NIEMALS negative Werte habenJa, es ist möglich, dies zu tun. In der folgenden Zeile
Ich würde vorschlagen, tun
und legen Sie das layout Ihrer mainFrame, bevor diese
JFrame
verwendetBorderLayout
standardmäßig. Wenn Sie nicht liefern eine positionsbeschränkung für das layout verwendetCenter
standardmäßig soJFrame.this.add(new BigP(),BorderLayout.CENTER);
undmainFrame.getContentPane.add(new BigP());
wäre das gleiche...bis auf die änderung der layout-manager 😉