Hola a todos. Llegados a este punto empieza lo más complicado de la asignatura.
Se comenzó la clase con un profesor nuevo que de ahora en adelante nos dará las 5 prácticas restantes que quedan.
A parte de lo que se explicaba en la práctica, hubo que dejar conceptos claros antes de nada, como el de que GUI (Interfaces Gráficas de Usuario) es una forma de comunicarse con el usuario. La comunicación puede ser gráfica, textual, sonora,… la definición de que salen imágenes por pantalla es errónea. El programa se comunica con el usuario de diferentes formas entonces: mediante texto (entrada y salida estándar), mediante sonido, o con un interfaz gráfico.
También nos pareció interesante la explicación sobre el comienzo de las interfaces gráficas y AWT. En definitiva, que todos los componentes de swing J(algo), ese (algo) tienen su correspondiente en AWT.
Comenzamos la práctica algo “acongojaillos”, pero por lo menos lo que hicimos en clase no fue tan mal. Ahora trataremos cómo nos fue con el primer ejercicio.
Nos encontramos con la clase HelloWorldGUI. De buenas a primeras no sabíamos muy bien con que nos íbamos a encontrar, por lo que compilamos y ejecutamos dicho código, entonces comprendimos mejor que hacía cada línea. Pero explicar cada línea lo piden más adelante, por lo que, SEGUID LEYENDO!!
Después enumeramos los nombres de las clases de los objetos que se crean en la ejecución de este programa. Era sencillo observar que se creaba un objeto JLabel, un JFrame y un JPanel. Acto seguido, enumeramos los métodos que se invocan en la ejecución de este programa. El primero, y el principal era el método main, el constructor de JFrame (perteneciente a la clase JFrame, obviamente), el setDefaultCloseOperation() lo llama un objeto JFrame, el getContentePane requiere de una JPanel, el método add() pertenece a la clase JPanel (como JPanel es de tipo contenedor, entonces al llamar al add() añadimos métodos al contenedor), y por último setSize() y setVisible() corresponden a la clase Window.
A la hora de decir a que clase pertenecía cada método patinamos bastante. A partir del getContentPane() ya nos costó más verlo, aunque era de cajón. Las que nos asombramos bastante fueron los dos últimos métodos, nosotros pensábamos que serían de la clase JFrame ya que se invocaban con un objeto de ese tipo, pero no. Miramos en el API y efectivamente pertenecían a la clase Window, son métodos que heredan de la clase java.awt.Component. No hace falta importarla porque Window hereda de java.awt.Container, ésta de java.awt.Component, y ésta de java.lang.Object. Como todos los objetos heredan de la clase Object, no es necesario importarla.
Escuchando al profesor, y acordándonos de lo que nos dijo Alberto, entendimos que para aprender a programar debíamos saber inglés. Así que comenzamos a leer el código observando lo que nos acababa de aparecer. Frame significa marco, entonces la primera línea, ERA PARA DARLE NOMBRE AL MARCO DE LA VENTANA Y DIBUJAR LA VENTANA. Al crearse un JFrame ya se crea un panel por defecto. La segunda línea llama al método setDefaultCloseOperation() mediante el objeto JFrame de la primera línea. Como parámetro del método setDefaultCloseOperation(), se pasa un atributo que está en JFrame (ya que no hace falta un objeto para su invocación y no lleva paréntesis, deducimos que era un atributo), EXIT_ON_CLOSE. Éste, por lo general, es un entero y tiene como modificador static final (la pista es que está escrito en mayúsculas). La finalidad de esta sentencia es la acción sobre la ventana de cerrar la ventana cuando se da a la aspa. Hay otras formas de cerrar ventanas, por ejemplo, que aparezca otra ventana preguntando si de verdad de la buena deseas cerrar la ventana, o cierras la ventana y se minimiza a un lado como el Messenger.
En la tercera línea creamos un objeto JPanel. Aquí se extrae, se obtiene, un contentPane. El getContentPane() dice al JFrame:”oyeeeeeeee, se que tienes un JPanel con un contentPane, andaaaaaa pirataaaaaa devuélvelo.”. El JFrame representa la ventana (hereda de Window) y JPanel es algo relacionado con un contenedor (hereda de Container). Esta línea nos costó bastante verla. Nos fuimos al API, a ver en la clase JFrame:
|
javax.swing
javax.swing.JFrame
el método getContentPane():
getContentPane public Container getContentPane() Returns the contentPane object for this frame. Specified by: getContentPane in interface RootPaneContainer Returns: the contentPane property See Also: setContentPane(java.awt.Container), RootPaneContainer.getContentPane()
|
por lo que, se devuelve el panel que contiene el JFrame, pero en un objeto de la clase Container. Como Container es superclase de la clase JPanel, entonces hay que hacer un casting para convertirlo en un objeto tipo JPanel.
En la siguiente sentencia buscamos en el diccionario label, cuyo significado es etiqueta. Creamos una instancia de JLabel mediante el constructor y lo inicializamos pasando un String (el texto, la etiqueta). También se puede poner imágenes, un fondo, un texto, pero no sonido.
En la quinta línea tuvimos que buscar el método add() en el API. Miramos en la clase JPanel,
|
Class JPanel javax.swing.JPanel
|
De aquí averiguamos que add() es un método que hereda de la clase java.awt.Container. Pinchando en él encontramos:
|
add public Component add(Component comp) Appends the specified component to the end of this container. This is a convenience method for addImpl(java.awt.Component, java.lang.Object, int). Note: If a component has been added to a container that has been displayed, validate must be called on that container to display the new component. If multiple components are being added, you can improve efficiency by calling validate only once, after all the components have been added. Parameters: comp – the component to be added Returns: the component argument See Also: addImpl(java.awt.Component, java.lang.Object, int), validate(), JComponent.revalidate()
el cual devuelve un Componente y se le pasa por parámetro un componente. Como JLabel hereda de Componente:
javax.swing javax.swing.JLabel |
Se lo pasamos por parámetro.
Nos pareció un poco lioso. Como nos tengamos que aprender de que hereda cada clase y cada método que tiene cada uno para saber cuál podemos utilizar, todo va a ser un cacao maravillao.
En la sexta línea miramos en el API la clase JFrame buscando el método setSize(). Encontramos éste, y también el setVisible(), que aparece en la línea número siete, que heredaban de la clase java.awt.Component:
|
setSize public void setSize(int width, int height) Resizes this component so that it has width width and height height. Parameters: width – the new width of this component in pixels height – the new height of this component in pixels Since: JDK1.1 See Also: getSize(), setBounds(int, int, int, int)
setVisible public void setVisible(boolean b) Shows or hides this component depending on the value of parameter b. Parameters: b – if true, shows this component; otherwise, hides this component Since: JDK1.1 See Also:
|
con setSize() ajustamos el tamaño del marco. Cuando la ventana se represente en pantalla será del tamaño que le hayamos dicho.
Con setVisible() se muestra por pantalla, si lo pones a true.
Al saber esto fue sencillo adivinar que había cambiar para que la ventana aumentase su tamaño cuatro veces. Tan solo hay que modificar los parámetros del método setSize(), multiplicándolos por cuatro.
Para crear una nueva clase en la que el fondo de la etiqueta tenga color azul, fuimos al API en la clase JLabel. Tras mucho buscar no lo logramos encontrar, el API es inmenso, además nosotros íbamos buscando algún método que realizase tal función, pero ahora que lo pensamos lo que más sentido tiene es un set. Hasta que no se dijo en clase no supimos que era necesario el setBackground(Color.BLUE);
setBackgroundpublic void setBackground(Color bg) Sets the background color of this component. Overrides:
Parameters:
See Also:
Procedente de la clase JComponent, la cual es superclase de JLabel: javax.swing
|
Al colocarla nos saltaba un error extraño, y el profesor nos ánimo a que observásemos bien lo que teníamos frente a nosotros, el API abierto por esa última clase. Nosotros entonces dijimos: “ah!, tendremos que importar JComponent”. POS’ NO (AMPARO, MANUELA, PO’ NO…..¿tas’ fumao’ un porro? Jjaja), porque JLabel hereda de JComponent. Lo que era necesario importar era la clase Color, para poder llamar a su atributo BLUE. El objeto de la clase Color ya está hecho. Color tiene una colección de tipos static, cada uno es un color. Entonces, nosotros escribimos: import java.awt.*; La verdad es que no estaba mal, así importábamos la clase Color pero también todas las demás que se encuentran en el paquete awt, de esta manera gastamos memoria. Lo mejor es colocar: import java.awt.Color; tal y como nos aconsejó el profesor, así la próxima vez que nos ocurra el mismo tipo de error, sabremos de donde proviene. De esta manera evitamos lo que se dice más adelante en la práctica, pensar que todo se hace como por arte de magia, ya que si para cada momento importamos tan solo lo estrictamente necesario aprenderemos cómo y por qué funciona cada cosa.
Después tuvimos otro problema, sin saber el motivo no nos aparecía en la ventana el esperado color azul de la etiqueta. Esto era causado por la falta del método setOpaque() en la clase HelloWorldGUIColor.
setOpaquepublic void setOpaque(boolean isOpaque)
If true the component paints every pixel within its bounds. Otherwise, the component may not paint some or all of its pixels, allowing the underlying pixels to show through. The default value of this property is false for Parameters:
See Also:
|
Tan solo con poner el parámetro a true, logramos que se pinte el componente y se vea por pantalla. Si no se pone el setOpaque(), no aparece el color. Deducimos entonces que los componentes pueden ser opacos o no, y las etiquetas pueden ser transparentes u opacas. Utilizar el método setBackground() sólo tiene sentido si el componente es opaco. Este método hereda de la clase JComponent:
javax.swing
|
A continuación se nos presentaban con los manejadores de ventana, y entendimos que éste es lo que pinta la ventana. El programa no puede controlar todo lo que ocurre en la pantalla, hay distintas ventanas abiertas en la pantalla. Esto se soluciona con el concepto de ventanas. A cada programa que quiere utilizar una interfaz gráfica, se le da un rectángulo, una ventana, la cual crea el manejador de ventana. Un programa se puede comunicar con el usuario con color, texto, imágenes,… El usuario se comunica con el programa escribiendo (JText), JButtom,.. El programa se tiene que comunicar con el manejador de ventanas en algún momento para dibujarle la ventana. La barra superior de una ventana (la que contiene los botones minimizar, maximizar y cerrar) es del manejador de ventana (si das a la aspa, el manejador de ventana dice al programa que se tiene que cerrar, el programa tiene que ejecutar) y el panel es “responsabilidad” del programa. No es necesario que el usuario se comunique con el manejador de ventana, porque para eso esta el programa. En resumen, el manejador de ventana gestiona las ventanas y el manejador de ventana se comunica con el usuario. Un ejemplo es cuando pulsamos el alt+tabulador para elegir entre distintas ventanas de la barra de estado.
Basándonos en la clase que nos dan al comienzo de la práctica, hay que superar una serie de retos.
El primer reto con el que nos topamos (y no somos topos
) dentro de este campo, fue realizar una clase en la que se ignorase el mensaje de cierre del manejador de ventana. En un principio pensamos en utilizar el método descrito en la práctica setDefaultCloseOperation(), pero después caímos en la cuenta de la tontería que íbamos a hacer. Para ignorar el mensaje de cierre, simplemente evitamos que llegue ese mensaje quitando la sentencia que lo provoca, es decir, quitando frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); La diferencia es que ahora, puedes cerrar la ventana pinchando en el aspa, pero el programa sigue corriendo, sigue ejecutado. Para pararlo hay que pulsar ctrl+ C.
Le sigue el reto de hacer que no se utilice ninguna decoración del manejador de ventanas. Dedicamos un poco de nuestro tiempo a leer los métodos explicados en la práctica. Claramente lo vimos, su propio nombre lo describía, setUndecorated(). Al llamarlo se queda el panel con su fondo grisáceo y su etiqueta HelloWorld! sobre él, pero desaparece ese borde azul típico de las ventanas de Windows y su barrita superior con sus tres monos botoncitos, obviamente, tampoco aparece el título que se le daba a esa barra, HelloWorldGUI window title.
Por último, había que hacer una clase que utilizase el Look and Feel por defecto en Java en vez del que estés usando con el manejador de ventanas. No estábamos muy seguros de si sería el método setDefaultLookAndFeelDecorated(boolean b) [jeje] ya que no nos lo insinúan para nada en el enunciado jeje. Desde luego nos quedó claro de forma teórica solamente la función que desempeñaba tal método, porque de escribirlo a no, no encontramos ninguna diferencia al respecto.
Y HASTA AQUÍ NUESTRA SESIÓN DE PRÁCTICAS. ÁNIMO QUE YA FALTAN POCAS!! Y RECUERDA: NO OLVIDES VISITARNOS. TE ESPERAMOS!!
PD. Oh my Gosh, ahora también nos entra complejo de Anne Igartiburu, o como leches se escriba!!
Ejercicio 2
|
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel;
class HelloWorldGUIDeaf
{
public static void main(String args[])
{ JFrame frame = new JFrame(“HelloWorldGUI window title”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = (JPanel) frame.getContentPane(); JLabel label = new JLabel(“Hello World!”); contentPane.add(label);
frame.setSize(100,50); frame.setVisible(true); } } |
|
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel;
class HelloWorldGUIUndecorated
{
public static void main(String args[])
{ JFrame frame = new JFrame(“HelloWorldGUI window title”); frame.setUndecorated(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = (JPanel) frame.getContentPane(); JLabel label = new JLabel(“Hello World!”); contentPane.add(label);
frame.setSize(100,50); frame.setVisible(true); } } |
|
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel;
class HelloWorldGUIDecorated
{
public static void main(String args[])
{ JFrame.setDefaultLookAndFeelDecorated(true ); JFrame frame = new JFrame(“HelloWorldGUI window title”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = (JPanel) frame.getContentPane(); JLabel label = new JLabel(“Hello World!”); contentPane.add(label);
frame.setSize(100,50); frame.setVisible(true); } } |
Ejercicio 3
|
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.Color;
public class CompassSimple { public CompassSimple() { JFrame frame=new JFrame(“CompassSimple”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane=(JPanel) frame.getContentPane(); JLabel label=new JLabel(“Hola mundo label.setForeground(Color.WHITE); label.setBackground(Color.BLACK); label.setOpaque(true); contentPane.add(label);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);//maximiza la ventana
frame.setVisible(true);
}
public static void main (String[] args) { CompassSimple nuevo=new CompassSimple(); }
} |
|
import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.Color; import java.awt.BorderLayout;//importante importar si no no podemos colocar (eso del WEST EAST SOUTH NORTH)
public class CompassSimple_ { public CompassSimple_() { JFrame frame=new JFrame(“CompassSimple”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane=(JPanel) frame.getContentPane();
JLabel north=new JLabel(“North”); JLabel south=new JLabel(“South”); JLabel west=new JLabel(“West”); JLabel east=new JLabel(“East”);
north.setForeground(Color.WHITE);//color de letra north.setBackground(Color.BLACK);//color de fondo north.setOpaque(true);//para poder ver los colores contentPane.add(north,BorderLayout.NORTH);//añadimos al panel la etiqueta y la horientacion
south.setForeground(Color.BLACK); south.setBackground(Color.WHITE); south.setOpaque(true); contentPane.add(south, BorderLayout.SOUTH);
west.setForeground(Color.BLUE); west.setBackground(Color.RED); west.setOpaque(true); contentPane.add(west, BorderLayout.WEST);
east.setForeground(Color.RED); east.setBackground(Color.BLUE); east.setOpaque(true); contentPane.add(east,BorderLayout.EAST);
frame.setSize(200,100);//esto es para cuando minimisamos no se achurrusque del todo frame.setExtendedState(JFrame.MAXIMIZED_BOTH);//maximiza la ventana
frame.setVisible(true);
}
public static void main(String[] args) { CompassSimple_ nuevo=new CompassSimple_(); } } |
|
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.Color; import java.awt.BorderLayout;
public class CompassBetter { public CompassBetter () {
JFrame frame=new JFrame(“CompassSimple”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane=(JPanel) frame.getContentPane();//si queremos luego manipular en el panel tenemos q hacer esto si no hace cosas raras contentPane.setBackground(Color.BLACK);//poner el fondo del panel en negro no nos lo piden lo ponemos nosotros
JLabel north=new JLabel(“North”,JLabel.CENTER); JLabel south=new JLabel(“South”,JLabel.CENTER); JLabel west=new JLabel(“West”); JLabel east=new JLabel(“East”);
north.setForeground(Color.WHITE);//color de letra north.setBackground(Color.BLACK);//color de fondo north.setOpaque(true);//para poder ver los colores contentPane.add(north,BorderLayout.NORTH);//añadimos al panel la etiqueta y la horientacion
south.setForeground(Color.WHITE); south.setBackground(Color.BLACK); south.setOpaque(true); contentPane.add(south, BorderLayout.SOUTH);
west.setForeground(Color.WHITE); west.setBackground(Color.BLACK); west.setOpaque(true); contentPane.add(west, BorderLayout.WEST);
east.setForeground(Color.WHITE); east.setBackground(Color.BLACK); east.setOpaque(true); contentPane.add(east,BorderLayout.EAST);
/*esto no nos lo piden nosotros lo ponemos*/ frame.setSize(250,250);//esto es para cuando minimisamos no se achurrusque del todo frame.setExtendedState(JFrame.MAXIMIZED_BOTH);//maximiza la ventana
frame.setVisible(true);
}
public static void main(String[] args)
{ CompassBetter nuevo=new CompassBetter (); } } |
|
import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.ImageIcon; import javax.swing.Icon; import java.awt.Color; import java.awt.BorderLayout;//importante importar si no no podemos colocar (eso del WEST EAST SOUTH NORTH)
public class CompassMuchBetter { public CompassMuchBetter () { JFrame frame=new JFrame(“CompassSimple”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane=(JPanel) frame.getContentPane();//si queremos luego manipular en el panel tenemos q hacer esto si no hace cosas raras contentPane.setBackground(Color.BLACK);//poner el fondo del panel en negro no nos lo piden lo ponemos nosotros
Icon imagen=new ImageIcon(“arrow.jpg”);
JLabel north=new JLabel(“North”,JLabel.CENTER); JLabel south=new JLabel(“South”,JLabel.CENTER); JLabel west=new JLabel(“West”); JLabel east=new JLabel(“East”); JLabel center=new JLabel(imagen);
contentPane.add(center,BorderLayout.CENTER);
north.setForeground(Color.WHITE);//color de letra north.setBackground(Color.BLACK);//color de fondo north.setOpaque(true);//para poder ver los colores contentPane.add(north,BorderLayout.NORTH);//añadimos al panel la etiqueta y la horientacion
south.setForeground(Color.WHITE); south.setBackground(Color.BLACK); south.setOpaque(true); contentPane.add(south, BorderLayout.SOUTH);
west.setForeground(Color.WHITE); west.setBackground(Color.BLACK); west.setOpaque(true); contentPane.add(west, BorderLayout.WEST);
east.setForeground(Color.WHITE); east.setBackground(Color.BLACK); east.setOpaque(true); contentPane.add(east,BorderLayout.EAST);
/*esto no nos lo piden nosotros lo ponemos*/ frame.setSize(250,250);//esto es para cuando minimisamos no se achurrusque del todo frame.setExtendedState(JFrame.MAXIMIZED_BOTH);//maximiza la ventana
frame.setVisible(true);
}
public static void main(String[] args) { CompassMuchBetter nuevo=new CompassMuchBetter (); } }
|
|
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.Dimension;
class HelloWorldGUICentered {
public static void main(String args[])
{ JFrame frame = new JFrame(“HelloWorldGUICentered window title”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dimension_pantalla=frame.getToolkit().getScreenSize() ; Dimension dimension_ventana=frame.getSize();
JPanel contentPane = (JPanel) frame.getContentPane(); JLabel label = new JLabel(“Hello World!”); contentPane.add(label);
frame.setLocation((dimension_pantalla.width – dimension_ventana.width)/ 2,(dimension_pantalla.height – dimension_ventana.height) / 2);
frame.pack(); frame.setVisible(true); }
} |
Ejercicio 4
|
import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JLabel; import java.awt.BorderLayout; import javax.swing.BoxLayout; import java.awt.Color;
public class BorderTest
{ String nombre; JLabel[] etiquetas;
public BorderTest()
{ nombre=”Label “; etiquetas=new JLabel[20];
JFrame frame=new JFrame(“BorderTest”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=(JPanel) frame.getContentPane(); //panel.setName(“ContentPane(GridLayout)”);
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
for(int i=0;i<etiquetas.length;i++) { etiquetas[i]=new JLabel(nombre+i);
if(i%2==0) { etiquetas[i].setBackground(Color.WHITE); etiquetas[i].setForeground(Color.BLACK); }
else { etiquetas[i].setBackground(Color.BLACK); etiquetas[i].setForeground(Color.WHITE);
}
etiquetas[i].setHorizontalAlignment(JLabel.CENTER);
etiquetas[i].setOpaque(true); panel.add(etiquetas[i]); }
frame.pack(); frame.setVisible(true); }
public static void main(String[] args)
{ BorderTest nuevo=new BorderTest(); } } |
|
import java.awt.Color; import javax.swing.border.TitledBorder; import javax.swing.border.LineBorder;
/*para probar*/ import javax.swing.JFrame; import javax.swing.JPanel;
public class PanelBorder extends TitledBorder {
public PanelBorder(Color color,Color letra,String nombre ) { super(new LineBorder(color),nombre); super.setTitleColor(letra); }
public PanelBorder(Color color,Color letra,int ancho,String nombre) { super(new LineBorder(color, ancho),nombre); super.setTitleColor(letra);
}
public PanelBorder(Color color,String nombre) { super(new LineBorder(color),nombre); }
public PanelBorder(Color color,int ancho,String nombre) { super(new LineBorder(color, ancho),nombre); }
public static void main(String[] args) {
JPanel generico=new JPanel(); JFrame principal=new JFrame(“VENTANA”);
//generico.setBorder(new PanelBorder(“Hola”)); //generico.setBorder(new PanelBorder(Color.BLUE,”Hola”)); //generico.setBorder(new PanelBorder(Color.YELLOW,50,”JAJJA”)); generico.setBorder(new PanelBorder(Color.YELLOW,Color.ORANGE,10,”Ventana”));
principal.setContentPane(generico); principal.pack(); principal.setVisible(true); principal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} }
|
|
import java.awt.Color; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.border.TitledBorder; import java.awt.BorderLayout;
public class EtiquetaGenerica extends JLabel {
public EtiquetaGenerica(String nombre,Color back) { super(nombre); super.setBackground(back); super.setOpaque(true); }
public EtiquetaGenerica(String nombre,int place) { super(nombre, place); }
public EtiquetaGenerica(String nombre,int place,Color back) { super(nombre, place); super.setBackground(back); super.setOpaque(true); }
public EtiquetaGenerica(String nombre,Color back,Color fore) { super(nombre); super.setBackground(back); super.setForeground(fore); super.setOpaque(true); }
public EtiquetaGenerica(String nombre,int place,Color back,Color fore) { super(nombre,place); super.setBackground(back); super.setForeground(fore); super.setOpaque(true); }
public EtiquetaGenerica(String nombre,int alinV,int alinH,Color fore) { super(nombre); super.setForeground(fore); super.setHorizontalAlignment(alinV); super.setVerticalAlignment(alinH); }
public EtiquetaGenerica(String nombre,int place,int alinV,int alinH,Color back) { super(nombre, place); super.setBackground(back); super.setHorizontalAlignment(alinV); super.setVerticalAlignment(alinH); super.setOpaque(true); }
public static void main(String[] args) {
JFrame frame=new JFrame(“Ventana para probar las etiquetas”); JPanel panel=new JPanel(); panel.setBorder(new TitledBorder(“Etiqueta Creada”));
panel.add(new EtiquetaGenerica(“Hola”,Color.BLUE),BorderLayout.NORTH); panel.add(new EtiquetaGenerica(“Hola”,Color.GREEN),BorderLayout.SOUTH); panel.add(new EtiquetaGenerica(“Hola”,JLabel.CENTER,Color.BLUE,Color.RED),BorderLayout.WEST); frame.setContentPane(panel); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} |
|
import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JLabel; import java.awt.BorderLayout; import javax.swing.BoxLayout; import java.awt.GridLayout; import java.awt.Color; import java.awt.Component; import javax.swing.border.TitledBorder; import java.awt.FlowLayout; import java.awt.ComponentOrientation; import javax.swing.border.LineBorder; import javax.swing.BorderFactory; import java.awt.GridBagConstraints;
public class LayoutManagerShow_ { public LayoutManagerShow_() { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame=new JFrame(“LayoutManagerShow_”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane=(JPanel)frame.getContentPane(); contentPane.setBorder(new PanelBorder(Color.BLACK,”GridLayout(1,2))”)); contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.X_AXIS));
/**PANEL0**********************/ JPanel panel0=new JPanel(); panel0.setBorder(new PanelBorder(Color.BLACK,”Panel0(GridLayout(3,1))”)); panel0.setLayout(new BoxLayout(panel0,BoxLayout.Y_AXIS));
/*****************PANEL00*/
JPanel panel00=new JPanel(); panel00.setBorder(new PanelBorder(Color.BLACK,”Panel00(FlowLayout)”));
panel00.add(new EtiquetaGenerica(“Label 0″,Color.RED)); panel00.add(new EtiquetaGenerica(“Label 1″,Color.RED)); panel00.add(new EtiquetaGenerica(“Label 2″,Color.RED)); panel00.add(new EtiquetaGenerica(“Label 3″,Color.RED));
/**************PANEL01***********/
JPanel panel01=new JPanel();
panel01.setBorder(new PanelBorder(Color.BLACK,”Panel01(BoxLayout)”));
panel01.add(new EtiquetaGenerica(“label 0 label 1 label 2″,Color.RED));
/***************PANEL02****************/ JPanel panel02=new JPanel(); panel02.setBorder(new PanelBorder(Color.BLACK,”Panel02(GridBagLayout)”));
panel02.add(new EtiquetaGenerica(“label 0″,Color.RED)); panel02.add(new EtiquetaGenerica(“label 1″,Color.RED)); panel02.add(new EtiquetaGenerica(“label 2″,Color.RED)); panel02.add(new EtiquetaGenerica(“label 3″,Color.RED)); panel02.add(new EtiquetaGenerica(“label 4″,Color.RED));
/**********PANEL1*/ JPanel panel1=new JPanel(); panel1.setBorder(new PanelBorder(Color.BLACK,”Panel1(BorderLayout)”));
panel1.add(new EtiquetaGenerica(“North”,JLabel.CENTER,JLabel.CENTER,JLabel.CENTER,Color.WHITE),BorderLayout.NORTH); panel1.add(new EtiquetaGenerica(“South”,JLabel.CENTER,JLabel.CENTER,JLabel.CENTER,Color.WHITE),BorderLayout.SOUTH); panel1.add(new EtiquetaGenerica(“West”,JLabel.CENTER,JLabel.CENTER,JLabel.CENTER,Color.WHITE),BorderLayout.WEST); panel1.add(new EtiquetaGenerica(“East”,JLabel.CENTER,JLabel.CENTER,JLabel.CENTER,Color.WHITE),BorderLayout.EAST); panel1.add(new EtiquetaGenerica(“Center”,JLabel.CENTER,JLabel.CENTER,JLabel.CENTER,Color.WHITE),BorderLayout.CENTER);
/**************ADD ***************/
panel0.add(panel00); panel0.add(panel01); panel0.add(panel02); contentPane.add(panel0); contentPane.add(panel1);
frame.pack(); frame.setVisible(true);
}
public static void main(String[] args) { LayoutManagerShow_ nuevo=new LayoutManagerShow_(); } } |
Lo que hemos conseguido de momento es esto, asi que lo iremos actualizando segun lo consigamos.









Madre-mia! confieso que no suelo pasar mucho por vuestro blog, hoy me he pasado y he alucinado:P como os lo currais… vais por el buen camino. Espero vuestro post sobre la practica 10 a ver si me aclarais algo porque ando un poco perdida :S
Por: kelilla el Mayo 13, 2008
a las 4:42 pm
:O… xD. . atonito .. estaba buscando sobre como entender el JPanel y me econtre con unos ejemplos exelentes…generalmente no post .. pero esto lo amerita… sigan asi .. muy buenos ejemplos gracias ayudan mucho
Por: francisco el Mayo 8, 2009
a las 5:10 am