Layout Probleme.

Status
Nicht offen für weitere Antworten.

dR.LoL

Bekanntes Mitglied
Hallo Leute,
Ich habe ein ARGHES Problem mit diesen Layouts von Java, hoffe ihr könnt mir helfen.

Ich möchte und finde ich habe es so implementiert, Wird allerdings aber NICHT so angezeigt wie ich das mir überlegt habe.

Es sollen 3 Panels sein. Der eine davon ist der Oben, der Oben sollte nochmals 3 Panels haben, das Erste dieser drei Panels (Um es Kurz zu sagen, von den 6 bisher erstellten, das ganz oben links) wird nun mit einem GridLayout(9,2) geteilt. Es soll dann so aussehen:

Links:
Calltype:
National
Call MO
Call MT
SMS MO
....

Rechts
Empty (Abstandhalter)
International
Call MO
Call MT
SMS MO
...

Es wird allerdings mit meinem Code so dargestellt:
Calltype: Empty National
International Call MO Call MO
Call MT Call MT SMS MO
....

Code:
//JPanel
    JPanel myPanel = new JPanel();
    myPanel.setLayout(new GridLayout(3,1));
    myPanel.setLocation(0, 0);
    myPanel.setSize(800,600);
    JPanel myPanelTop = new JPanel();
    myPanelTop.setLayout(new GridLayout(1,3));
    myPanelTop.setLocation(0, 0);
    myPanelTop.setSize(800, 200);
    JPanel myPanelTopLeft = new JPanel();
    myPanelTopLeft.setLayout(new GridLayout(9,2));
    myPanelTopLeft.setLocation(0, 0);
    myPanelTopLeft.setSize(200, 200);
    JPanel myPanelTopCenter = new JPanel();
    myPanelTopCenter.setLayout(new FlowLayout(FlowLayout.LEFT));
    myPanelTopCenter.setLocation(200,0);
    myPanelTopCenter.setSize(200, 200);
    JPanel myPanelTopRight = new JPanel();
    myPanelTopRight.setLayout(new FlowLayout(FlowLayout.LEFT));
    myPanelTopRight.setLocation(400, 0);
    myPanelTopRight.setSize(300, 200);
    JPanel myPanelCenter = new JPanel();
    myPanelCenter.setLayout(new FlowLayout(FlowLayout.LEFT));
    myPanelCenter.setLocation(0, 200);
    myPanelCenter.setSize(800, 200);
    JPanel myPanelBottom = new JPanel();
    myPanelBottom.setLayout(new FlowLayout(FlowLayout.LEFT));
    myPanelBottom.setLocation(0, 400);
    myPanelBottom.setSize(800, 200);
    //JLabel
    JLabel lblEmpty = new JLabel("");
    JLabel lblCalltype = new JLabel("Calltype:");
    JLabel lblNational = new JLabel("National");
    JLabel lblInternational = new JLabel("International");
    //JRadioButton
    JRadioButton rdbNatCallMO = new JRadioButton("Call MO");
    JRadioButton rdbNatCallMT = new JRadioButton("Call MT");
    JRadioButton rdbNatSMSMO = new JRadioButton("SMS MO");
    JRadioButton rdbNatSMSMT = new JRadioButton("SMS MT");
    JRadioButton rdbNatMMSMO = new JRadioButton("MMS MO");
    JRadioButton rdbNatMMSMT = new JRadioButton("MMS MT");
    JRadioButton rdbNatGPRSMO = new JRadioButton("GPRS MO");
    JRadioButton rdbNatGPRSMT = new JRadioButton("GPRS MT");
    JRadioButton rdbIntCallMO = new JRadioButton("Call MO");
    JRadioButton rdbIntCallMT = new JRadioButton("Call MT");
    JRadioButton rdbIntSMSMO = new JRadioButton("SMS MO");
    JRadioButton rdbIntSMSMT = new JRadioButton("SMS MT");
    JRadioButton rdbIntMMSMO = new JRadioButton("MMS MO");
    JRadioButton rdbIntMMSMT = new JRadioButton("MMS MT");
    JRadioButton rdbIntGPRSMO = new JRadioButton("GPRS MO");
    JRadioButton rdbIntGPRSMT = new JRadioButton("GPRS MT");
    //JButton
    JButton myRateButton = new JButton("Rate it!");
    myRateButton.addActionListener(
      new ActionListener() { 
        public void actionPerformed(ActionEvent event) {
          onClickmyRateButton();
        }
      }
    );
    //ButtonGroup
    ButtonGroup grpNat = new ButtonGroup();
    grpNat.add(rdbNatCallMO);
    grpNat.add(rdbNatCallMT);
    grpNat.add(rdbNatSMSMO);
    grpNat.add(rdbNatSMSMT);
    grpNat.add(rdbNatMMSMO);
    grpNat.add(rdbNatMMSMT);
    grpNat.add(rdbNatGPRSMO);
    grpNat.add(rdbNatGPRSMT);
    ButtonGroup grpInt = new ButtonGroup();
    grpInt.add(rdbIntCallMO);
    grpInt.add(rdbIntCallMT);
    grpInt.add(rdbIntSMSMO);
    grpInt.add(rdbIntSMSMT);
    grpInt.add(rdbIntMMSMO);
    grpInt.add(rdbIntMMSMT);
    grpInt.add(rdbIntGPRSMO);
    grpInt.add(rdbIntGPRSMT);
    
    //Assembly GUI components
    //myPanelTopLeft.add(myButton, FlowLayout.LEFT);
    myPanelTopLeft.add(lblCalltype);
    myPanelTopLeft.add(lblEmpty);
    myPanelTopLeft.add(lblNational);
    myPanelTopLeft.add(lblInternational);
    myPanelTopLeft.add(rdbNatCallMO);
    myPanelTopLeft.add(rdbIntCallMO);
    myPanelTopLeft.add(rdbNatCallMT);
    myPanelTopLeft.add(rdbIntCallMT);
    myPanelTopLeft.add(rdbNatSMSMO);
    myPanelTopLeft.add(rdbIntSMSMO);
    myPanelTopLeft.add(rdbNatSMSMT);
    myPanelTopLeft.add(rdbIntSMSMT);
    myPanelTopLeft.add(rdbNatMMSMO);
    myPanelTopLeft.add(rdbIntMMSMO);
    myPanelTopLeft.add(rdbNatMMSMT);
    myPanelTopLeft.add(rdbIntMMSMT);
    myPanelTopLeft.add(rdbNatGPRSMO);
    myPanelTopLeft.add(rdbIntGPRSMO);
    myPanelTopLeft.add(rdbNatGPRSMT);
    myPanelTopLeft.add(rdbIntGPRSMT);
    myPanelTopCenter.add(new JLabel("myPanelTopCenter"));
    myPanelTopRight.add(new JLabel("myPanelTopRight"));
    myPanelTop.add(myPanelTopLeft);
    myPanelTop.add(myPanelTopCenter);
    myPanelTop.add(myPanelTopRight);
    myPanelCenter.add(new JLabel("myPanelCenter"));
    myPanelBottom.add(new JLabel("myPanelBottom"));
    myPanel.add(myPanelTop);
    myPanel.add(myPanelCenter);
    myPanel.add(myPanelBottom);
    
    //Assembly GUI components into JFrame
    this.setJMenuBar(myMenuBar);
    this.getContentPane().add(myPanel);
    this.pack();



Ich bin euch wirklich dankbar für eure Hilfe!
Ich finde es einfach nicht raus und möchte nicht noch mehr Zeit unnötig dabei verbrauchen!

Danke und Gruss
vom LoL
 

dR.LoL

Bekanntes Mitglied
Ich bin einfach noch nicht vertraut mit Java Swing, deshalb hier nochmal etwas Code.

Code:
...
    JPanel myPanelBottom = new JPanel();
    myPanelBottom.setLayout(new GridLayout(2,1));
    myPanelBottom.setLocation(0, 400);
    myPanelBottom.setSize(800, 200);
...
    myPanelBottom.add(lblStatus);
    myPanelBottom.add(new JScrollPane(txtStatus));
...

Weshalb ist zwischen dem lblStatus und der Textarea nun ein ca. 50 Pixel grosser Abstand? :S

Habe das Gefühl, Swing macht immer einfach mal was...
Oder implementiere ich so katastrophal?
Wäre wirklich froh, wenn mir mal wer helfen kann....
 

dR.LoL

Bekanntes Mitglied
Ich konnte bisher bereits das Erste Problem lösen, nur das mit dem Status text:

...
JPanel myPanelBottom = new JPanel();
myPanelBottom.setLayout(new GridLayout(2,1));
myPanelBottom.setLocation(0, 400);
myPanelBottom.setSize(800, 200);
...
myPanelBottom.add(lblStatus);
myPanelBottom.add(new JScrollPane(txtStatus));
...

Ist noch unklar!


Guckt in diesem Forum eigendlich keiner rein?
Oder sind meine Fragen zu blöde?
Oder soll ich so eine Newb Frage das nächste mal einfach im Beginner Forum posten?
 

L-ectron-X

Gesperrter Benutzer
Mir ist das alles ein wenig konfus. Kannst du mal eine Zeichnung posten, dann kann man sich eventuell etwas mehr von deinem Problem vorstellen.
 

dR.LoL

Bekanntes Mitglied
Erstmal danke, dass du dich bereit erklärt hast, mir versuchen zu helfen :]><

Okay, Printscreen des GUI's (Neuling, hab extrem Probleme mich an das Layout zeuch zu gewöhnen (Okk, bin noch nicht lange an Java)

Screenshot:
shot1.jpg



Problem:
Das Problem sollte klar sein auf dem Screen, atm habe ich noch probleme das oben rechts korrekt darzustellen, sollte ich aber bald hinkriegen... unten ist der Fehler klar ersichtlich, ca 1 cm abstand von "Status:" bis dann das JTextfield folgt....
Das ist das Problem

Code:
Code:
    //JPanel
    JPanel myPanel = new JPanel();
    myPanel.setLayout(new GridLayout(3,1));
    myPanel.setLocation(0, 0);
    myPanel.setSize(800,600);
    JPanel myPanelTop = new JPanel();
    myPanelTop.setLayout(new GridLayout(1,2));
    myPanelTop.setLocation(0, 0);
    myPanelTop.setSize(800, 300);
    JPanel myPanelTopLeft = new JPanel();
    myPanelTopLeft.setLayout(new GridLayout(9,2));
    myPanelTopLeft.setLocation(0, 0);
    myPanelTopLeft.setSize(400, 300);
    JPanel myPanelTopRight = new JPanel();
    myPanelTopRight.setLayout(new GridLayout(10,2));
    myPanelTopRight.setLocation(400, 0);
    myPanelTopRight.setSize(400, 300);
    JPanel myPanelCenter = new JPanel();
    myPanelCenter.setLayout(new GridLayout(2,1));
    myPanelCenter.setLocation(0, 200);
    myPanelCenter.setSize(800, 200);
    JPanel myPanelBottom = new JPanel();
    myPanelBottom.setLayout(new GridLayout(2,1));
    myPanelBottom.setLocation(0, 400);
    myPanelBottom.setSize(800, 100);
...
    JTextArea txtStatus = new JTextArea();
    txtStatus.setEditable(false);
    txtStatus.setLineWrap(true);
    txtStatus.setWrapStyleWord(true);
    txtStatus.setForeground(Color.GREEN);
    txtStatus.setText(getTimestamp()+"\tSRETT is started!");
...
myPanelBottom.add(lblStatus);
myPanelBottom.add(new JScrollPane(txtStatus));
...
myPanel.add(myPanelBottom);
...
this.getContentPane().add(myPanel);
...



THX!
 

Deception

Mitglied
Hey ho,
Ich würde dir vorschlagen auf die vorgefertigten Layouts zu verzichten und selbst ein Layout zu diesem Zwecke zu schreiben! Das ganze ist leichter als gedacht! Jedes Component enthält die Methode setBounds(int, int, int,int) (glaub ich zumindest das es immer int ist, kannste ja in der api nachschauen). Mit dieser Methode kannst du deine Komponente auf dem Bildschirm anordnen und entweder durch gute Einschätzung oder durch testen zum Ziel kommen.
Tipp: Um ein RICHTIG eigenes Layout zu schreiben implementierst du in einer Klasse das Interface LayoutManager.

Hier ein kurzes Beispiel:

Code:
public class MyOwnLayout implements LayoutManager
{
	    public void addLayoutComponent(String name, Component comp) {
	    }

	    public void removeLayoutComponent(Component comp) {
	    }

	    public Dimension preferredLayoutSize(Container parent)
	    {
	        Dimension dim = new Dimension(0, 0);

	        Insets insets = parent.getInsets();
	        dim.width = 320 + insets.left + insets.right;
	        dim.height = 168 + insets.top + insets.bottom;

	        return dim;
	    }
	    public Dimension minimumLayoutSize(Container parent)
	    {
	        Dimension dim = new Dimension(0, 0);
	        return dim;
	    }

	    public void layoutContainer(Container parent)
	    {
	        Insets insets = parent.getInsets();
	        Component c;
	        
	        c = parent.getComponent(0);
	        if (c.isVisible())
	        {
	        	c.setBounds(insets.left+12,insets.top+10,40,20);
	        }
	        
	        c = parent.getComponent(1);
	        if (c.isVisible())
	        {
	        	c.setBounds(insets.left+62,insets.top+10,112,20);
	        }
	        
	        c = parent.getComponent(2);
	        if (c.isVisible())
	        {
	        	c.setBounds(insets.left+12,insets.top+50,80,20);
	        }
	        
	        c = parent.getComponent(3);
	        if (c.isVisible())
	        {
	        	c.setBounds(insets.left+120,insets.top+50,152,20);
	        }
	        
	  }
}

Theoretisch kannst du es so übernehmen und nur den layoutContainer anpassen. Eine if-Verzweigung steht für eine Komponente!
Tipp für die Übersichtlichkeit: Packe z.b. die Checkboxen in ein JPanel, adde das JPanel in DIESES Layout und mache ein Extra Layout für das JPanel oder benutze dort dann ein GridLayout oder so ;)

Wegen setBounds musste nochmal in der API schaun, hoffe aber dir doch ein wenig geholfen zu haben ;)
Machs gut,
Deception
 

VipViper2000

Aktives Mitglied
@Dr LoL

Also dein Problem besteht darin, dass die Komponenten in einem GridLayout ja immer gleich groß sind. Das heisst über deinem JLabel "Status" ist auch 1 cm Platz, was du bisher aber noch nicht gemerkt hast.

Tip: Verwende statt dem GridLayout das GridBagLayout. Das ist zwar etwas komplizierter, lässt dir aber absolut freie Hand. Ich benutze das fast nur noch. Und selbst einen LayoutManager schreiben halte ich für übertrieben. Und ich würde auch nicht so viel mit dem setLocation Methoden arbeiten. Sowas kann immer merkwürdige Folgen haben, wenn man das Fenster mal resized usw.

Gruß,
VipViper2000
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
B Probleme mit Layout Manager (BoxLayout) AWT, Swing, JavaFX & SWT 4
U JTabbedPane: Layout-Probleme bei addTab zur Laufzeit AWT, Swing, JavaFX & SWT 2
N Layout Probleme AWT, Swing, JavaFX & SWT 6
N Swing Probleme mit Layout AWT, Swing, JavaFX & SWT 4
R Probleme mit Layout AWT, Swing, JavaFX & SWT 6
G Probleme mit Content bei Null-Layout verändern AWT, Swing, JavaFX & SWT 7
G Probleme mit SWT und Layout AWT, Swing, JavaFX & SWT 14
E Probleme beim Layout! AWT, Swing, JavaFX & SWT 8
E Probleme beim Layout mit Buttons und CheckboxGroup AWT, Swing, JavaFX & SWT 9
G Layout Probleme AWT, Swing, JavaFX & SWT 6
S Layout Probleme AWT, Swing, JavaFX & SWT 13
P Probleme mit Layout AWT, Swing, JavaFX & SWT 3
W Probleme mit Border- und null-Layout AWT, Swing, JavaFX & SWT 8
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
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
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
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
E Probelm mit Layout AWT, Swing, JavaFX & SWT 1
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
P Tipps für GUI-Layout AWT, Swing, JavaFX & SWT 2
M Passender Layout-Manager AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B LayoutManager Card Layout AWT, Swing, JavaFX & SWT 2
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
1 Eigenes Layout schreiben AWT, Swing, JavaFX & SWT 4
B SWT layout invalidieren in SWT? AWT, Swing, JavaFX & SWT 4
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
J Layout: oben 20% unten 80% AWT, Swing, JavaFX & SWT 12
T Layout für Listendarstellung AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
K Eclipse Layout (Gimp Layout, Tiled Layout...) AWT, Swing, JavaFX & SWT 4
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
M Layout funktioniert nicht AWT, Swing, JavaFX & SWT 3
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
H Layout Idee AWT, Swing, JavaFX & SWT 8
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
P Swing welchen Layout Manager verwenden AWT, Swing, JavaFX & SWT 9
J LayoutManager Komponentenaustausch zerschießt Layout AWT, Swing, JavaFX & SWT 4
F Layout-Problem AWT, Swing, JavaFX & SWT 2
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
B Anderen Layout-Manager verwenden AWT, Swing, JavaFX & SWT 17
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
D Bild in JPanel verschiebt Layout. Wie fixieren? AWT, Swing, JavaFX & SWT 9
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11
S LayoutManager Welcher LayoutManager für dieses zweispaltige Layout? AWT, Swing, JavaFX & SWT 13
G LayoutManager Layout welches von Links nach rechts anordnet mit TOP Alignment! AWT, Swing, JavaFX & SWT 5
A Best practice für konkretes Layout AWT, Swing, JavaFX & SWT 10
G LayoutManager Layout für Spalten AWT, Swing, JavaFX & SWT 8
A Layout/JPanelgröße AWT, Swing, JavaFX & SWT 6
S pack() bei null-Layout AWT, Swing, JavaFX & SWT 10
C SWT Tabellen-Layout in StyledText? AWT, Swing, JavaFX & SWT 6
J LayoutManager Welchen Layout/Design-Manager? AWT, Swing, JavaFX & SWT 4
R Swing Layout setzen AWT, Swing, JavaFX & SWT 3
L Layout automatische Anpassung umgehen? AWT, Swing, JavaFX & SWT 5
A Problem mit Layout-Manager AWT, Swing, JavaFX & SWT 11
J Button Layout anpassen AWT, Swing, JavaFX & SWT 22
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
B Buttongröße im Layout AWT, Swing, JavaFX & SWT 4
B LayoutManager Layout Problem AWT, Swing, JavaFX & SWT 14
O LayoutManager Layout entwerfen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben