# JSeperator in JPanel



## Eckbert88 (4. Okt 2009)

Hallo,

ich habe folgendes Problem:
ich will JComboBoxen und JTextLabels in einem JPanel voneinander trennen. Wenn ich den JSeperator benutze verzieht es das komplette Fenster:


```
JPanel fieldsPane = new JPanel(new SpringLayout());
        fieldsPane.add(dozentlbl);
	fieldsPane.add(dozent);

        fieldsPane.add(new JSeparator(JSeparator.HORIZONTAL),
        BorderLayout.LINE_START);

        fieldsPane.add(name);
	fieldsPane.add(nameText);
        fieldsPane.add(studienganglbl);
        fieldsPane.add(studiengang);
        fieldsPane.add(lehrveranstaltunglbl);
	fieldsPane.add(lehrveranstaltung);

	fieldsPane.setLayout(new SpringLayout());
	SpringUtilities.makeCompactGrid(fieldsPane, 4, 2,
                                                    6, 6,
                                                    6, 6);
```


Anbei auch ein Bild von der GUI:








Wie krieg ich die Elemente in eine Reihe? Danke!


----------



## dayaftereh (4. Okt 2009)

Hey, ich glaube das Beste wär, wenn du mal den kompletten code Postest! was für eine LayoutManager nutzt du?


----------



## Eckbert88 (4. Okt 2009)

Da das ein Uniprojekt ist darf ich keine Layout Manager benutzen. Muss alles per Hand programmiert werden  
Hier mal das gesamte Formular (falls es hilft):


```
package de.hdm.iSchedule.gui;

import java.util.Vector;

import java.awt.BorderLayout;
import java.awt.Color;
import java.rmi.RemoteException;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

import de.hdm.iSchedule.data.Dozent;
import de.hdm.iSchedule.data.Lehrveranstaltung;
import de.hdm.iSchedule.data.Studiengang;

public class Dozentformular {

    static InterfaceClient ic = new InterfaceClient();

    private JComboBox lehrveranstaltung = new JComboBox();
    private JComboBox studiengang = new JComboBox();
    private JComboBox dozent = new JComboBox();

    private JTextField nameText;


    public void setDozent(Dozent d) {
        if (d!= null) {
            try {
               nameText.setText(d.getName());

            } catch (RemoteException re) {
               System.out.println("RemoteException");
               System.out.println(re);
            }
        }
    }

      void removeDozent() {
        nameText.setText("");

	}

      String getName() {
	    return nameText.getText();
    }

      JPanel generateComponents(StundenplanGUI stundenplanGui)
        throws RemoteException {
	JLabel name = new JLabel("Name", JLabel.TRAILING);
	nameText = new JTextField(5);
	nameText.setEditable(true);
        nameText.setActionCommand("changeName");
        nameText.addActionListener(stundenplanGui);

	JLabel studienganglbl = new JLabel("Studiengang wählen", JLabel.TRAILING);
        /**
         * Hier wird die Methode getAllLehrveranstaltung im ClientInterface aufgerufen
         * um alle Kategorien aus der DB zu laden
         */
        Vector<Studiengang> studiengaenge = ic.getAllStudiengang();

        for (Studiengang sg : studiengaenge) {
            studiengang.addItem(sg.getStudiengang());
        }

        studiengang.setVisible(true);
        studiengang.setActionCommand("selectStudiengang");
        studiengang.addActionListener(stundenplanGui);


        JLabel lehrveranstaltunglbl = new JLabel("Lehrveranstaltung wählen", JLabel.TRAILING);
        /**
         * Hier wird die Methode getAllLehrveranstaltung im ClientInterface aufgerufen
         * um alle Kategorien aus der DB zu laden
         */
        Vector<Lehrveranstaltung> lehrveranstaltungen = ic.getAllLehrveranstaltungen();

        for (Lehrveranstaltung lv : lehrveranstaltungen) {
            lehrveranstaltung.addItem(lv.getBezeichnung());
        }

        lehrveranstaltung.setVisible(true);
        lehrveranstaltung.setActionCommand("selectLehrveranstaltung");
        lehrveranstaltung.addActionListener(stundenplanGui);


        JLabel dozentlbl = new JLabel("Dozent wählen", JLabel.TRAILING);
        /**
         * Hier wird die Methode getAllLehrveranstaltung im ClientInterface aufgerufen
         * um alle Kategorien aus der DB zu laden
         */
        Vector<Dozent> dozents = ic.getAllDozenten();

        for (Dozent d : dozents) {
            dozent.addItem(d.getName());
        }

        dozent.setVisible(true);
        dozent.setActionCommand("selectDozent");
        dozent.addActionListener(stundenplanGui);


	JPanel fieldsPane = new JPanel(new SpringLayout());
        fieldsPane.add(dozentlbl);
	fieldsPane.add(dozent);
        fieldsPane.add(name);
	fieldsPane.add(nameText);
        fieldsPane.add(studienganglbl);
        fieldsPane.add(studiengang);
        fieldsPane.add(lehrveranstaltunglbl);
	fieldsPane.add(lehrveranstaltung);

	fieldsPane.setLayout(new SpringLayout());
	SpringUtilities.makeCompactGrid(fieldsPane, 4, 2,
                                                    6, 6,
                                                    6, 6);

	JButton submit = new JButton("Ändern");
        submit.setActionCommand("changeDozent");
        submit.addActionListener(stundenplanGui);

	JButton delete = new JButton("Löschen");
        delete.setActionCommand("deleteDozent");
        delete.addActionListener(stundenplanGui);

	JButton create = new JButton("Neu");
        create.setActionCommand("createDozent");
        create.addActionListener(stundenplanGui);

		JPanel buttonPane = new JPanel();
		buttonPane.add(submit);
		buttonPane.add(delete);
		buttonPane.add(create);

        JPanel pane = new JPanel(new BorderLayout());

		pane.setBorder(BorderFactory.createCompoundBorder(BorderFactory
				.createEmptyBorder(5, 5, 5, 5), BorderFactory
				.createTitledBorder(
				BorderFactory.createLineBorder(Color.black), "Dozent")));
		pane.add(fieldsPane, BorderLayout.CENTER);
		pane.add(buttonPane, BorderLayout.SOUTH);

        return pane;
	}
```


----------



## Landei (4. Okt 2009)

LOL! "LayoutManager" ist nicht ein grafischer Layout-Editor, sondern eine Klasse, die für die Ausrichtung deiner Komponenten zuständig ist, hier z.B. SpringLayout und BorderLayout. Da ich mich mit ersterem nicht auskenne, kann ich dir damit leider nicht helfen, aber da wird sich schon noch ein Auskenner finden...


----------



## Ebenius (5. Okt 2009)

Wo kommt denn die Klasse SpringUtilities her? Die Methode _SpringUtilities.makeCompactGrid(...)_ erstellt Dir Dein Layout und hat offensichtlich eine andere Auffassung über dessen Aufbau als Du. 

Du solltest Dich also mit dem Thema SpringLayout und mit der API-Dokumentation der SpringUtilities-Klasse auseinandersetzen; zu ersterem: Sun Java™ Tutorials: How to Use SpringLayout, ggf. die gesamte Lesson Sun Java™ Tutorials: Laying Out Components Within a Container.

Ebenius


----------

