Frage

Dies ist, was mein Programm aussehen sollte, und ich bin ein wenig verwirrt darüber, wo ich verschiedene Layouts verwenden soll.

Ich habe eine Window-Klasse, die die Panel-Klasse aufruft und die Panel-Klasse ruft die Inputpanel und DisplayPanel Klassen. Meine Inputpanel-Klasse ruft meine DetailsPanel, CrimePanel und ButtonPanel Klassen, so dass sie machen, was unter der Registerkarte Eingang zu sehen ist. Mir wurde gesagt, einen Border für das ganze Fenster zu verwenden, und dass die DetailsPanel (linkes Bild) und CrimePanel sollten Grid sein.

Bedeutet dies, ich soll:

  1. Setzen Sie den Code in Border-Panel und den Gridcode in CrimePanel und DetailsPanel oder
  2. Setzen Sie den Code in Border Fenster und den Gridcode Panel?

alt text http://img137.imageshack.us/img137/6422/93381955 .jpg

War es hilfreich?

Lösung

Okay, Ihre Beschreibung ist ein wenig verwirrend (oder ich bin immer noch zu müde heute oder nicht genug Koffein noch) nicht. Ihre Vorstellung von Panel-Klassen von anderen „Berufung“ ist auch ein wenig seltsam.

Aber soweit ich es sehen kann, Ihre erste Option ist die richtige.

In der Regel nisten Sie nur die Objekte zur Laufzeit, so ist es ein wenig wie folgt aussehen könnte:

InputPanel (has BorderLayout)
+--DetailsPanel (put in BorderLayout.WEST; has GridLayout)
|  +--nameLabel
|  +--nameTextField
|  +--...
+--CrimePanel (put in BorderLayout.NORTH; has GridLayout)
|  +--murderRadioButton
|  +--arsonRadioButton
|  +--...
+--ButtonPanel (put in BorderLayout.CENTER; has GridLayout)
   +--button

Sie tun dies in der Regel in dem Konstruktor der entsprechenden Klasse:

public class InputPanel {
    public InputPanel() {
        this.setLayout(new BorderLayout());
        this.add(new DetailsPanel(), BorderLayout.WEST);
        this.add(new CrimePanel(), BorderLayout.NORTH);
        this.add(new ButtonPanel(), BorderLayout.CENTER);
    }
}

public class DetailsPanel {

    JLabel nameLabel;
    JTextField nameField;
    // ...

    public DetailsPanel() {
        this.setLayout(new GridLayout(5, 1));

        nameLabel = new JLabel("Name");
        nameField = new JTextField();
        // ...

        this.add(nameLabel);
        this.add(nameField);
        // ...
    }
}

...

Allerdings sehe ich ein kleines Problem hier: Da GridLayout keine Komponenten erlaubt mehrere Spalten zu überbrücken Sie im DetailsPanel auf der linken als auch auf Nest anderen Platten benötigen. Sie können mit einem einzigen GridBagLayout weg, die die benötigten Fähigkeiten, oder Sie nisten andere Platten gibt:

DetailsPanel (has BorderLayout)
+--panel1 (has GridLayout with 2 rows, 1 column; put in BorderLayout.NORTH)
|  +--nameLabel
|  +--nameField
+--panel2 (has GridLayout with 3 rows, 2 columns; put in BorderLayout.CENTER)
   +--dayField
   +--dayLabel
   +--monthField
   +--...

Andere Tipps

Aus Ihrer Beschreibung, Option 1 sollte funktionieren. Geben Sie den Eingang JPanel ein BorderLayout, mit den Details, Verbrechen und Button JPanels (im Westen, Norden und Süden jeweils) mit GridLayouts.

Zunächst einmal müssen Sie eine JTabbedPane in das Fenster legen Sie Ihre zwei Registerkarten enthalten (Eingabe und Anzeige), die jeweils einem JPanel besteht.

Das Eingabefeld unterteilt werden kann unter Verwendung eines Border als Joannes beschreibt; eine weitere Alternative ist die Grouplayout in Java eingeführt 6, die sehr mächtig ist, aber schwer euer Gehirn um zu wickeln. Es könnte die gesamte Registerkarte Layout in einem Panel verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top