Pregunta

Esto es lo que mi programa debe ser similar y yo soy un poco confundido sobre donde debería utilizar diferentes diseños.

Tengo una clase de ventana, que llama a la clase y la clase Panel Panel llama a las clases InputPanel y DisplayPanel. Mi clase InputPanel llama mis clases DetailsPanel, CrimePanel y ButtonPanel por lo que constituyen lo que se ve en la pestaña de entrada. Me dijeron que para usar un BorderLayout para toda la ventana, y que el DetailsPanel (panel izquierdo) y CrimePanel debería ser GridLayout.

¿Esto significa que debe:

  1. Coloque el código BorderLayout en el panel y el código GridLayout en CrimePanel y DetailsPanel o
  2. Poner el código BorderLayout en la ventana y el código GridLayout en el Panel?

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

¿Fue útil?

Solución

De acuerdo, su descripción es un poco complicado (o todavía estoy demasiado cansado hoy o no tienen suficiente cafeína aún). Su noción de "llamar" clases de paneles de otros también es un poco raro.

Pero por lo que yo puedo ver, su primera opción es la correcta.

En general que acaba de nido de los objetos en tiempo de ejecución, por lo que podría parecer un poco como la siguiente:

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

Por lo general, hacer esto en el constructor de la clase correspondiente:

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);
        // ...
    }
}

...

Sin embargo, veo un pequeño problema aquí: Desde GridLayout no permite a los componentes abarcan múltiples columnas puede que tenga que anidan otros paneles en el DetailsPanel de la izquierda también. Usted puede conseguir lejos con un solo GridBagLayout que tiene las capacidades necesarias, o anida otros paneles de allí:

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
   +--...

Otros consejos

A partir de su descripción, la opción 1 debería funcionar. Dar la entrada JPanel un BorderLayout, con los detalles, la delincuencia y la JPanels botón (ubicado en el oeste, norte y sur, respectivamente) que tienen GridLayouts.

En primer lugar tendrá que poner un JTabbedPane en la ventana para contener sus dos pestañas (entrada y de salida), cada uno consistente en un JPanel.

El panel de entrada podría ser subdividido usando un BorderLayout como describe Joannes; otra alternativa es el GroupLayout introdujo en Java 6, que es muy potente, pero difícil de envolver su alrededor mente. Podría ser utilizado a la disposición en la ficha entera en un solo panel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top