style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Uso correcto del GridLayout?

Hola publico de nuevo un tema pero esta ves se trata del correcto Uso del GridLayout y BorderLayout, al realizar una interfaz grafica dentro de paneles y agregarle componentes me encuentro con el problema de que la orientacion que le doy a los paneles con el BorderLayout no funcionan correctamente o no le doy el uso apropiado y quisiera que algunos ustedes me pudieran dar algunos consejos / tips para no cometer ciertos errores a la hora de programar; en este caso les mostrare la interfaz que hice y que debo realizar ami parecer el codigo esta bien pero tal ves sea la cuestion del uso correcto del GridLayout o BorderLayout.

http://pastebin.com/1KfLtRQj

AdjuntoTamaño
Interfaz Grafica.jpg187.04 KB
Interfaz Grafica Original.png192.43 KB

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

codigo

import javax.swing.*;
 
public class Print extends JFrame {
 
public Print() {
 
setTitle("Printers");
setSize(600, 350);
setLocation(100, 100);
setResizable(true);
getContentPane().setLayout(new FlowLayout());
addComponentes();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
 
}
 
public void addComponentes() {
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel3a = new JPanel();
JPanel panel3b = new JPanel();
JPanel panel3c = new JPanel();
JPanel panel3d = new JPanel();
JPanel panel3e = new JPanel();
JPanel panel4 = new JPanel();
 
String[] lista = {"High", "Normal", "Low", "VeryLow"};
 
JRadioButton boton = new JRadioButton("Selection");
JRadioButton boton2 = new JRadioButton("All");
JRadioButton boton3 = new JRadioButton("Applet");
 
panel3a.setLayout(new GridLayout(1, 1));
panel3a.add(new JTextArea());
 
panel3b.setLayout(new GridLayout(3, 1));
panel3b.add(new JCheckBox("Image"));
panel3b.add(new JCheckBox("Text"));
panel3b.add(new JCheckBox("Code"));
 
panel3c.setLayout(new GridLayout(1, 1));
panel3b.add(new JTextArea());
 
panel3d.setLayout(new GridLayout(3, 1));
panel3d.add(boton);
panel3d.add(boton2);
panel3d.add(boton3);
 
panel3e.setLayout(new GridLayout(1, 1));
panel3e.add(new JTextArea());
 
panel2.setLayout(new BorderLayout());
panel2.add(new JLabel("Printer: MyPrinter"));
add(panel2, BorderLayout.PAGE_START);
 
panel3.setLayout(new BorderLayout());
panel3.setLayout(new GridLayout(1, 5));
panel3.add(panel3a);
panel3.add(panel3b);
panel3.add(panel3c);
panel3.add(panel3d);
panel3.add(panel3e);
add(panel3, BorderLayout.CENTER);
 
panel4.setLayout(new BorderLayout());
panel4.setLayout(new GridLayout(1, 3));
panel4.add(new JLabel("Print Quality:"));
panel4.add(new JComboBox(lista));
panel4.add(new JCheckBox("Print to File"));
add(panel4, BorderLayout.PAGE_END);
 
panel.setLayout(new BorderLayout());
panel.setLayout(new GridLayout(4, 1, 10, 10));
panel.add(new JButton("OK"));
panel.add(new JButton("Cancel"));
panel.add(new JButton("Setup..."));
panel.add(new JButton("Help"));
add(panel, BorderLayout.EAST);
 
}
}
Imagen de Jose Manuel

Empieza leyendo esto.

borrar

como borro este post para poder hbacer otro ?? es que soy nuevo y no se muy bien c omo hacer los post y ya lei los tips pero nesecito borrar este post

Imagen de Jose Manuel

No ocupas borrar, solo

No ocupas borrar, solo edita.

Cuando desarrollas UI en java debes recordar que existe un "juego" entre las capas.
La manera difícil de hacerlo es codificar y codificar a lo tonto, andar moviendole a los layout manager y esperar a que salga bien.

Otra forma es hacer un dibujo a lápiz y papel donde veas como irán los manejadores y los componentes. Mira, de acuerdo tu ejemplo puede ser así:
http://imageshack.us/photo/my-images/822/capasz.png/

Disculpa el diseño, pero es mas fácil a lapiz jeje.
Donde los espacios negros son los manejadores generales y los blancos son componentes o manejadores específicos. Si te basas en el dibujo veras que al momento de escoger que manejador usar ya sera mas fácil.

Según yo lo podrías agrupar

Según yo lo podrías agrupar así:

agrupado

Los rojos como BoxLayout
Los verdes como FlowLayout
Y el morado como BorerLayout ( el que viene default en el frame )

Como dice José Manuel tienes que hacer juego con los layout managers y combinarlos. Difícilmente podrías hacerlo con solo uno ( aunque group layout es bastaaaante flexible )

Suerte

Maestros

grasias por su respuesta ese es mi gran problema que no se como interpretar bien las cosas ahora es mas facil mmmm no conosco BoxLayout pero no es algo que no pueda dominar hay tutoriales y videos asi que grasias ustedes si que son expertos en este lenjuage ojala fueran los maestros de mi escuela jejeje grasias :D

Inconveniente ...

oe men perdona que te moleste hice exactamente como me dijiste y como me dijo la otra persona me salio casi todo el unico inconveniente que tube es con un componente con un simple JLabel que quiero colocarlo al norte con borderlayout pero me lo deja en el oeste :s ya estan acomodadas todos los demas componentes el JLabel es el unico que no e podido ponerlo al norte no se que es lo que pasa ya intente con 3 admonistradores de diseño :s
http://img39.imageshack.us/img39/1872/inconveniente.png

    import java.awt.*;
    import javax.swing.*;
     
    public class Print extends JFrame {
     
        public Print() {
     
            setTitle("Printers");
            setSize(600, 300);
            setLocation(100, 100);
            setResizable(true);
            getContentPane().setLayout(new FlowLayout());
            addComponentes();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
     
        }
     
        public void addComponentes() {
     
            JPanel panel6 = new JPanel();
            JLabel label = new JLabel("Print: MyPrinters");
            panel6.setLayout(new BorderLayout());
            panel6.setLayout(new GridLayout(1, 1));
            panel6.add(label);
            add(panel6, BorderLayout.NORTH);
     
            JPanel panel4 = new JPanel();
            JPanel b = new JPanel();
            b.setLayout(new BoxLayout(b, BoxLayout.Y_AXIS));
            b.add(new JCheckBox("Image"));
            b.add(new JCheckBox("Text"));
            b.add(new JCheckBox("Code"));
            panel4.setLayout(new BorderLayout());
            panel4.setLayout(new GridLayout(1, 2, 10, 10));
            panel4.add(new JTextArea(""));
            panel4.add(b);
            add(panel4, BorderLayout.WEST);
     
            JPanel panel5 = new JPanel();
            JPanel a = new JPanel();
            a.setLayout(new BoxLayout(a, BoxLayout.Y_AXIS));
            a.add(new JRadioButton("Selection"));
            a.add(new JRadioButton("ALL", true));
            a.add(new JRadioButton("Applet"));
            panel5.setLayout(new BorderLayout());
            panel5.setLayout(new GridLayout(1, 3));
            panel5.add(new JTextArea());
            panel5.add(a);
            panel5.add(new JTextArea());
            add(panel5, BorderLayout.CENTER);
     
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            panel.setLayout(new GridLayout(4, 1, 10, 10));
            panel.add(new JButton("OK"));
            panel.add(new JButton("Cancel"));
            panel.add(new JButton("Setup..."));
            panel.add(new JButton("Help"));
            add(panel, BorderLayout.EAST);
     
            String[] lista = {"High", "Medium", "Low", "VeryLow"};
            JPanel panel3 = new JPanel();
            panel3.setLayout(new BorderLayout());
            panel3.setLayout(new GridLayout(1, 3, 10, 10));
            panel3.add(new JLabel("Print Quality"));
            panel3.add(new JComboBox(lista));
            panel3.add(new JCheckBox("Print to File"));
            add(panel3, BorderLayout.SOUTH);
     
        }
    }
Imagen de Jose Manuel

Cuidado con los manejadores.

Estas haciendo mal el uso de los manejadores, estas estableciendo de manera incorrecta los manejadores a los paneles.
Recuerdas cuando dije "jugar con los manejadores"? Pues eso, tienes que jugar un poco con ellos para que veas como es que actúan.
Mira, para poder hacer tu programa, como yo te propuse ocupas estos manejadores:
FlowLayout
BorderLayout
GridLayout

Ninguno mas. Esta fácil tu programa. No te desesperes si no te sale a los primeros intentos.
Entonces quedamos en que el problema radica en como estas usando tus manejadores. Recuerda que algunos componentes se agregan en el frame tal y como los agregas en código.

Imagen de juanjo23

Estabas usando FlowLayout en el contenedor de tu JFrame

Estabas usando FlowLayout en el contenedor de tu JFrame

import java.awt.*;
    import javax.swing.*;
     
    public class Print extends JFrame {
     
        public Print() {
     
            setTitle("Printers");
            setSize(600, 300);
            setLocation(100, 100);
            setResizable(true);
            getContentPane().setLayout(new BorderLayout());
            addComponentes();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
     
        }
     
        public void addComponentes() {
            ((JPanel)this.getContentPane()).setBorder(BorderFactory.createEmptyBorder(0, 30, 10, 30));
            add(new JLabel("Print: MyPrinters"), BorderLayout.NORTH);
     
            JPanel panel4 = new JPanel();
            JPanel b = new JPanel();
            b.setLayout(new BoxLayout(b, BoxLayout.Y_AXIS));
            b.add(new JCheckBox("Image"));
            b.add(new JCheckBox("Text"));
            b.add(new JCheckBox("Code"));
            panel4.setLayout(new BorderLayout());
            panel4.setLayout(new GridLayout(1, 2, 10, 10));
            panel4.add(new JTextArea(""));
            panel4.add(b);
            add(panel4, BorderLayout.WEST);
     
            JPanel panel5 = new JPanel();
            JPanel a = new JPanel();
            a.setLayout(new BoxLayout(a, BoxLayout.Y_AXIS));
            a.add(new JRadioButton("Selection"));
            a.add(new JRadioButton("ALL", true));
            a.add(new JRadioButton("Applet"));
            panel5.setLayout(new BorderLayout());
            panel5.setLayout(new GridLayout(1, 3));
            panel5.add(new JTextArea());
            panel5.add(a);
            panel5.add(new JTextArea());
            add(panel5, BorderLayout.CENTER);
     
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            panel.setLayout(new GridLayout(4, 1, 10, 10));
            panel.add(new JButton("OK"));
            panel.add(new JButton("Cancel"));
            panel.add(new JButton("Setup..."));
            panel.add(new JButton("Help"));
            add(panel, BorderLayout.EAST);
     
            String[] lista = {"High", "Medium", "Low", "VeryLow"};
            JPanel panel3 = new JPanel();
            panel3.setLayout(new BorderLayout());
            panel3.setLayout(new GridLayout(1, 3, 10, 10));
            panel3.add(new JLabel("Print Quality"));
            panel3.add(new JComboBox(lista));
            panel3.add(new JCheckBox("Print to File"));
            add(panel3, BorderLayout.SOUTH);
     
        }
    }

resultado:

Imagen de Jose Manuel

@juanjo23 la imagen que

@juanjo23 la imagen que muestras no mantiene la proporción respecto a la original.
Fijate que en la original los botones de la derecha cubren todo el espacio Norte-Sur, y en tu imagen, el label se mantiene mas arriba y los tres componentes graficos(label, combo, check ) estan mas abajo que los botones.

Para mi, el "truco" en esta aplicación esta en usar paneles primarios y secundarios. Donde los paneles secundarios actúan como paquetes que se integraran a los paneles primarios.

El asunto esta de especificar correctamente que paneles serán primarios y cuales secundarios. Nada mas. Cuando los tengas identificados solo tienes que ir agregando los al frame.

Si con este tipo de explicación no puedes( que seguramente es porque no me explico muy bien), entonces te ayudare con código.

Imagen de juanjo23

@Jose Manuel

La imagen no mantiene la proporción original porque yo no le modifiqué esa parte del código, sólo le puse el BorderLayout para que el label con el texto "Print my printers" se ubicara en la parte de arriba, ya que sólo le estaba respondiendo su duda de porqué el mismo le aparecía al este, no le estaba haciendo la tarea. Sé un poco más observador con el código, no con la imagen.

Imagen de Jose Manuel

Si he mencionado lo de la

Si he mencionado lo de la imagen no es porque no me haya dado cuenta sobre el código. Simplemente me ha parecido innecesario resolver esa duda cuando el orden de los componentes en general no es el adecuado. De nada sirve que ese label quede correcto, cuando la estructura general esta mal.

Al menos así me parece a mi. Si estoy mal, por favor, corrijan.

Imagen de juanjo23

Pues yo sólo trate de

Pues yo sólo trate de resolver la duda del label en el BorderLayout pero si @Jose Manuel tienes razón el diseño de todos los demás componentes está mal.

Y está bien, la sub-pregunta

Y está bien, la sub-pregunta era ¿por que me sale al oeste? y la respuesta fue: porque estás usando flowlayout ( y además con la imagen +1 )

Ahora sephiro tiene que seguir trabajando en ello

Byte!

Imagen de Jose Manuel

Para que no te desanimes

Para que no te desanimes mira, ya lo hice. Osea que si se puede! no te rindas si no te sale en varias ocasiones. =)

Me ha faltado algo, algo que @juanjo23 ya te había proporcionado, un borde vació para crear el espacio en los bordes de la ventana.
Una linea como esta:

setBorder(BorderFactory.createEmptyBorder(0,30,5,30));

Para obtener este cambio:

Echale ganas!

Grasias

Grasias por sus respuestas si es cierto que me falla lo que pasa que estoy tratando de estudiar lo que mas que pueda por que un maestro que lleve el semestre pasado no me enseño nada y ahora con el nuevo maestro vamos mas rapido y si me sigo quedando atras reprobare pero pues pienso que siguiendo con ejercicios y practicas mejorare grasias por molestarse en solucionar mi problema:D

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">