Respuesta a: Dudas de Java

#5161

jaime
Participante

Hola Juan,

Lo primero de todo muchas gracias por el pedazo de curso que has hecho. Desde hace años he estado buscando cursos en internet y todos los dejaba a mitad; o daban por entendidas muchas cosas, o lo hacían muy técnico. Enhorabuena.

Ya he terminado la «primera» parte del curso y me he aventurado a realizar este ejercicio:

http://www.geocities.ws/netbeams/30_POO_PROYECTOS_CON_CLASES_PROPIAS.pdf

LLevo dos días y no consigo calcar la ventana (se que podría hacer una cualquiera, pero prefiero intentar la que muestran).

La primera pregunta es: ¿Qué layout usarías?

Ahora una duda:

He probado a usar un GroupLayout, que por lo que entiendo (API JAVA: is intended for use by builders, but may be hand-coded as well. )tambien podemos programarlo a mano.

Como no conseguía que el código compilara, programé una clase solo para el Layout:

import static javax.swing.GroupLayout.Alignment.BASELINE;
import static javax.swing.GroupLayout.Alignment.LEADING;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

public class Find extends JFrame {
    public Find() {
        JLabel label = new JLabel("Pelicula:");;
        JTextField textField = new JTextField("Introduce el nombre de la pelicula...");
        JButton boton_cambiar = new JButton("Cambiar");
        JButton boton_nv = new JButton("Nueva ventana");
        JButton boton_ocup = new JButton("% Ocupación");
        JButton boton_vaciar = new JButton("Vaciar");
        JButton boton_ingresos = new JButton("Ingresos");
  

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(layout.createSequentialGroup()
            .addComponent(label)
            .addGroup(layout.createParallelGroup(LEADING)
                .addComponent(textField)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(boton_nv)
                        .addComponent(boton_ocup)
                        .addComponent(boton_vaciar)
                        .addComponent(boton_ingresos)))
            .addGroup(layout.createParallelGroup(LEADING)
                .addComponent(boton_cambiar)
                )
        );
       
        layout.linkSize(SwingConstants.HORIZONTAL, boton_cambiar);

        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(BASELINE)
                .addComponent(label)
                .addComponent(textField)
                .addComponent(boton_cambiar))
            .addGroup(layout.createParallelGroup(LEADING)
                    
                        .addComponent(boton_nv)
                        .addComponent(boton_ocup)
                        .addComponent(boton_vaciar)
                        .addComponent(boton_ingresos)
                )
        );

        setTitle("Find");
        pack();
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel(
                                  "javax.swing.plaf.metal.MetalLookAndFeel");
                                //  "com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                                //UIManager.getCrossPlatformLookAndFeelClassName());
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                new Find().setVisible(true);
            }
        });
    }
}

y ha funcionado. Por tanto he cogido la parte que me interesa del código y la he copiado en la famosa clase de la lamina, en mi caso «LaminaSalas»:

import static javax.swing.GroupLayout.Alignment.BASELINE;
import static javax.swing.GroupLayout.Alignment.LEADING;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class LaminaSalas extends JPanel{
	
	 public LaminaSalas() {
		 JComponent panel1= new JPanel();
		 
	        JLabel label = new JLabel("Pelicula:");;
	        JTextField textField = new JTextField("Introduce el nombre de la pelicula...");
	        JButton boton_cambiar = new JButton("Cambiar");
	        JButton boton_nv = new JButton("Nueva ventana");
	        JButton boton_ocup = new JButton("% Ocupación");
	        JButton boton_vaciar = new JButton("Vaciar");
	        JButton boton_ingresos = new JButton("Ingresos");
	  

	        GroupLayout layout = new GroupLayout(panel1);
	        panel1.setLayout(layout);
	        layout.setAutoCreateGaps(true);
	        layout.setAutoCreateContainerGaps(true);

	        layout.setHorizontalGroup(layout.createSequentialGroup()
	            .addComponent(label)
	            .addGroup(layout.createParallelGroup(LEADING)
	                .addComponent(textField)
	                .addGroup(layout.createSequentialGroup()
	                        .addComponent(boton_nv)
	                        .addComponent(boton_ocup)
	                        .addComponent(boton_vaciar)
	                        .addComponent(boton_ingresos)))
	            .addGroup(layout.createParallelGroup(LEADING)
	                .addComponent(boton_cambiar)
	                )
	        );
	       
	        layout.linkSize(SwingConstants.HORIZONTAL, boton_cambiar);

	        layout.setVerticalGroup(layout.createSequentialGroup()
	            .addGroup(layout.createParallelGroup(BASELINE)
	                .addComponent(label)
	                .addComponent(textField)
	                .addComponent(boton_cambiar))
	            .addGroup(layout.createParallelGroup(LEADING)
	                    
	                        .addComponent(boton_nv)
	                        .addComponent(boton_ocup)
	                        .addComponent(boton_vaciar)
	                        .addComponent(boton_ingresos)
	                )
	        );

	

}
}

pero no me muestra nada.

He intentado cambiar estas lineas:
GroupLayout layout = new GroupLayout(panel1);
panel1.setLayout(layout);
y ponerlas como:
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);

pero al extender JPanel no me deja…y si cambio a LaminaSalas entends JFrame…luego no me lo muestra.

pregunta…¿Sabrías como solucionarlo?

muchas gracias de antemano