JAVA: Practicando con BorderLayout

20 01 2009

Seguimos con los layouts. Recordar que para entender este ejemplo es necesario chekear las anteriores explicaciones sobre FlowLayout y BoxLayoutLayout

BorderLayout, es un layout que ubica los componentes en cualquiera de sus 5 regiones que tiene..

Un componente podemos ubicarlo arriba, abajo, izquierda o a la derecha.

borderlayout

Para establecer a BorderLayout como manegador de Disenio,

JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());

Luego para agregar los componentes

frame.add(etiqeuta, BorderLayout.CENTER);
frame.add(botonIzquierdo,BorderLayout.WEST);
frame.add(botonDerecho,BorderLayout.EAST);
frame.add(cajaTexto,BorderLayout.NORTH);
frame.add(panelInferior,BorderLayout.SOUTH);

No es obligatorio, llenar todas las regiones, en el caso de existir alguna region sin componente,  esta region visiblemente se anulara, es importante esto, ya que si enviamos un componente al centro, y no enviamos nada en la parte izquierda(WESTH), entonces, el componente enviado al centro  se visaluizara en la parte WESTH.

En el ejemplo siguiente se tiene, un JFrame, este mismo los ordenara atravez de un BorLayout,  En el norte, ira una JLabel, en el centro un JTextAre,  y en el sur, este y el oeste un panel para cada region.

Cada panel, ubicara sus componentes de la forma que noosotros queramos,  en este caso el del sur, atravez de un flowLayout, y el de este y oeste con un BoxLayout.

Aqui el demo

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class DemoBorderLayout {
    //variables y comtenedores
    private JLabel etiquetaSu;
    private JPanel panelIzquierdo, panelDerecho, panelInferior;
    private JButton botonIz1, botonIz2, botonIz3;
    private JButton botonDe1, botonDe2, botonDe3;
    private JButton    botonIn1, botonIn2;
    private JScrollPane scroll;

    public void contruyePanelIzquierdo(){
        panelIzquierdo = new JPanel();
        botonIz1=new JButton("Izq1");
        botonIz2=new JButton("Izq2");
        botonIz3=new JButton("Izq3");
        panelIzquierdo.setLayout(new BoxLayout(panelIzquierdo,BoxLayout.Y_AXIS));
        panelIzquierdo.setBackground(Color.red);
        panelIzquierdo.add(botonIz1);
        panelIzquierdo.add(botonIz2);
        panelIzquierdo.add(botonIz3);
    }

    public void contruyePanelDerecho(){
        panelDerecho = new JPanel();
        botonDe1=new JButton("Der1");
        botonDe2=new JButton("Der2");
        botonDe3=new JButton("Der3");
        panelDerecho.setLayout(new BoxLayout(panelDerecho,BoxLayout.Y_AXIS));
        panelDerecho.setBackground(Color.blue);
        panelDerecho.add(botonDe1);
        panelDerecho.add(botonDe2);
        panelDerecho.add(botonDe3);
    }

    public void contruyePanelInferior(){
        panelInferior = new JPanel();
        botonIn1=new JButton("Aceptar");
        botonIn2=new JButton("Cancelar");
        panelInferior.setLayout(new FlowLayout());
        panelInferior.setBackground(Color.green);
        panelInferior.add(botonIn1);
        panelInferior.add(botonIn2);
    }

    public void contruyeVentana(){
        JFrame frame = new JFrame();
        scroll = new JScrollPane(new JTextArea("JTextArea",10,15));
        etiquetaSu = new JLabel("Demostracion por INFORUX ");
        Font aux=etiquetaSu.getFont();
        etiquetaSu.setFont(new Font(aux.getFontName(), aux.getStyle(), 20));
        frame.setLayout(new BorderLayout());

        //agregamos los paneles al frame principal
        frame.add(etiquetaSu,BorderLayout.NORTH);
        frame.add(scroll, BorderLayout.CENTER);
        frame.add(panelIzquierdo,BorderLayout.WEST);
        frame.add(panelDerecho,BorderLayout.EAST);
        frame.add(panelInferior,BorderLayout.SOUTH);
        //Configuramos el frame
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public DemoBorderLayout(){
        contruyePanelInferior();
        contruyePanelIzquierdo();
        contruyePanelDerecho();
        contruyeVentana();
    }

    public static void main (String [] inforux){
        new DemoBorderLayout();
    }
}

Compilamos y ejecutamos.

$javac DemoBorderLayout.java
$java DemoBorderLayout

El resultador ser asi

pantallazo3

pantallazo13

En esta interfaz de usuario, solo se empleo los layouts, explicados FlowLayout, BoxLayout y BorderLayout.

Sencillo.

PD: La API  completa de BorderLayout

Saludos

Anuncios




JAVA: Practicando con BoxLayout

20 01 2009

BoxLayout, es un Layout recontra parecido al FlowLayout, cual es la diferencia? es simple, FlowLayout ubica todos los componentes solo de forma horizontal, mientras que BoxLayout los ubica, tanto horizontal como vertical.

Para crear una clase BoxLayout, necesitamos 2 argumentos: el objeto contenedor, y la clase que indica la forma de como ordenara los componetes,.

BoxLayout.X_AXIS —– Forma Horizontal
BoxLayout.Y_AXIS —– Forma Vertical

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame,BoxLayout.X_AXIS));

Luego para agregar los componentes es simple, lo mismo como  hicimos con FlowLayout.

JButton boton =  new JButton("Aceptar");
frame.add(boton);

Aqui  tengo un ejemplo, sobre una clasica ventana de logueo, cabe destacar q para este ejemplo demostrativo, solo me limite a usar BoxLayout.

La idea general, es crear un JFrame geeneral, el cual tendra 3 paneles  y una etiqueta, Estos  estaran  ordenados con BoxLayout en forma vertical.

Cada panel tendran cajas de textos y etiquetas. Estos  estaran ordenados con BoxLayout en forma horizontal.

import javax.swing.BoxLayout;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPasswordField;
import javax.swing.WindowConstants;

public class DemoBoxLayout{
    private JPanel panelSuperior, panelMedio, panelInferior;
    private JLabel etiqueta1, etiqueta2, etiqueta3;
    private JTextField cajaTexto;
    private JPasswordField cajaPass;
    private JButton botonAceptar, botonCancelar;
    private JFrame frame;

    public void construyePanelSuperior(){
        panelSuperior =new JPanel();
        etiqueta2= new JLabel("Usuario");
        cajaTexto = new JTextField(10);
        panelSuperior.setLayout(new BoxLayout(panelSuperior, BoxLayout.X_AXIS));
        panelSuperior.add(etiqueta2);
        panelSuperior.add(cajaTexto);
    }

    public void construyePanelMedio(){
        panelMedio=new JPanel();
        etiqueta3= new JLabel("Password");
        cajaPass = new JPasswordField(10);
        panelMedio.setLayout(new BoxLayout(panelMedio, BoxLayout.X_AXIS));
        panelMedio.add(etiqueta3);
        panelMedio.add(cajaPass);
    }

    public void construyePanelInferior(){
        panelInferior=new JPanel();
        botonAceptar=new JButton("Aceptar");
        botonCancelar=new JButton("Cancelar");
        panelInferior.setLayout(new BoxLayout(panelInferior, BoxLayout.X_AXIS));
        panelInferior.add(botonAceptar);
        panelInferior.add(botonCancelar);
    }

    public void construyeVentana(){
        frame = new JFrame();
        etiqueta1 = new JLabel("Demo por inforux");
        frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS) );
        frame.add(etiqueta1);
        frame.add(panelSuperior);
        frame.add(panelMedio);
        frame.add(panelInferior);
        frame.pack();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public DemoBoxLayout(){
        construyePanelSuperior();
        construyePanelMedio();
        construyePanelInferior();
        construyeVentana();
    }

    public static void main (String [] inforux){
        new DemoBoxLayout();
    }
}

Compilamos y ejecutamos

$javac DemoBoxLayout.java
$java DemoBoxLayout

El resultado final sera:

pantallazo2

pantallazo12

Para esta interface de usuario, solo se limito a usar BoxLayout, ya q es un ejemplo demostrativo.

PD: La API completa de BoxLayout

Continuamos despues. Saludoss





JAVA: Practicando con FlowLayout

19 01 2009

Continuando con  los layouts, es que en esta oportunidad, tocaremos al mas facil de usar,

El FlowLayout, es aquel layout q ubica a todos los componentes en forma horizontal, en el orden q le digamos.

Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo “setLayout()” asignarle el layout correspondiente.

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());

Una vez, asiganado el layout al contenedor, tendremos q agregar los componentes, plenamente ya declarados y creados.

JButton boton =  new JButton("Aceptar");
frame.add(boton);

Hecho esto, el contenedor mismo, los ubicara en el centro(por defecto). Si queremos que empieze de derecha a izquierda o izquierda a derecha o en el centro, se lo decimos.

frame.setLayout(new floLayout(FlowLayout.CENTER));
frame.setLayout(new floLayout(FlowLayout.RIGHT));
frame.setLayout(new floLayout(FlowLayout.LEFT));

Aqui un jemplo:

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.JFrame;

/*demostracion por inforux*/
public class DemoFlowLayout {
    private JButton  botonEnviar;
    private JTextField cajaTexto;
    private JLabel etiqueta;

    public void construyeVentana(){
        //creamos la ventana y asignamos el layout
        JFrame frame  = new JFrame();
        frame.setLayout(new FlowLayout());

        //Creamos los componentes a utilizar
        botonEnviar = new JButton("Enviar");
        cajaTexto  = new JTextField(12);
        etiqueta= new JLabel("Escribe tu nombre");

        //Aniadimos los componentes  a la ventana
        frame.add(etiqueta);
        frame.add(cajaTexto);
        frame.add(botonEnviar);                

        //algunas configuraciones de la ventana
        frame.pack();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);   
    }
    public DemoFlowLayout(){//constructor de la clase
        construyeVentana();
    }

    public static void main ( String [] Inforux){
        new DemoFlowLayout();       
    }
}

Luego compilamos y ejecutamos

$javac DemoFlowLayout.java
$java DemoFlowLayout

El resultado sera asi:

pantallazo1

pantallazo11

Como ven, la misma ventana siempre ubicara a los componentes de la mejor manera..

PD: La API completa de FlowLayout

Luego seguimos con el resto de layouts.

Saludos





JAVA: Empezando con Layouts

19 01 2009

Tiempo atraz acostumbraba a implementar mis GUIs de JAVA atravez de setBouns(), es muy facil hacerlo, pueden verlo ustedes en los antiguos tutoriales q ofreci.

Sim embargo, tenia un serio problema, y es que al ser implementado en mi portatil, cuando lo terminaba y lo ejecutaba en una computadora de escritorio con linux, o windows, toda la interfas de usuario q tan bonita habia quedado en mi portatil, ahora estaba totalmente desproporcinada y fea. Porque ocurrio esto? la respuesta es sencilla, el metodo setBouns() fija el componente swing en una coordenada XY especifica de la ventana y esta asu vez a la pantalla del monitor donde esta implementandose.

setBouns(), es facil de usar, pero tiene desventajas, cuando intentamos ejecutarlo en diferentes computadoras donde el tamanio de la ventana es diferente, y el SO tambien.

Entonces por eso es necesario (yo diria OBLIGATORIO) el aprendizaje de los layouts, ya que estos ajustan los componente swing (JButton, JTextField, etc) con relacion a la Ventana mas no al tamanio de la pantalla, esto es fundamental ya que permite la ejecucion de la aplicacion en cualquier computadora y SO, sin que la interfaz de usuario se vea afectada, mucho menos tener botones cortados, o letras q no caben.

ventana.setLayout(new LayoutRequerido());

Con un layout adecuado, y ademas agregando el método pack() a la ventana, permitira que obtenga el tamaño justo,para visualizar todos los componentes.

ventana.pack();

Los layouts mas conocidos,  necesarios y los cual explicare mas adelante son:

FlowLayout, BoxLayout, BorderLayout, GridLayout, GridBagLayout

En el caso de no queder usar Layouts, se especifica con

ventana.setLayout(null);

Luego Seguimos. Saludos





Guzano infecto a mas de 1 millon de Pcs con Guindos

16 01 2009

El susodicho guzanito bautizado con el nombre de “Downadup” el cual fue reportado en noviembre del 2008, se propaga aprovechando la vulnerabilidad del servidor de servicios RPC, que permite la ejecucion de comandos en forma remotaimages

Infecta a Windows 95/98/Me/NT/2000/XP/Vista Server 2003, está desarrollado en Assembler con una extensión de 62,976 bytes y comprimido con rutinas propias.

Una vez ingresado al sistema se copia a la siguiente ruta:

%System%\[nombre_aleatorio].dll  Lee el resto de esta entrada »




Solucionar Problema al Enviar Mensajes Hotmail en Iceweasel

15 01 2009

Microsoft HOTMAIL ha estado en constantes cambios, y uno de ellos es darle problemas a nuestro iceweasel para no dejarle enviar mensajes atraves de su servicio de correo, sin embargo con una sencilla config podemos dar solucion al asunto.

1. Abrir el nevagador icewease, y en la barra de direcciones escribir:

about:config Lee el resto de esta entrada »





Les Presento… Desktop Drapes

10 01 2009

Drapes es una sencilla aplicacion que configura el cambio automatico del fonde de escritorio de nuestro escritorio Gnome.

Para su instalacion.

#apt-get install drapes

Luego para Acceder a el Sistema>Preferencias>Desktop Drapes

preferencias Lee el resto de esta entrada »