ficasU.. - MC Yolanda Moyao Martínez

Anuncio
Interfaces Gráficas de
Usuario
M . C . Y O L A N D A M O YA O M A R T Í N E Z
GUI(Graphical User Interface)
Conjunto de componentes gráficos que posibilitan la interacción entre el usuario
y la aplicación. Es decir ventanas, botones, combos, listas, cajas de diálogo,
campos de texto, etc
API’S
API: Interfaz de Programación de Aplicaciones
Java provee dos API's con las que podemos trabajar para desarrollar
GUIs
La más básica es AWT (Abstrct Window Toolkit).
Las más desarrolladas se hacen con Swing, las cuales son más
identificables ya que todas comienzan con "J", por ejemplo: JButton,
JTextField, JTextArea, JPanel y JFrame son clases de Swing.
Jerarquía de clases
Terminología
Frame – El marco es la ventana real en la que todos los componentes de su
programa se llevan a la acción.
Los campos de texto, radio buttons, etiquetas y los menús están contenidos
dentro del marco. Todas las aplicaciones Java se ejecuta dentro de una ventana y
cada ventana necesita un marco en el que varios componentes puedan “vivir”.
Panel de Contenido –El panel de contenidos en el que todos los componentes
de programas se colocan.
Se puede pensar en el panel de contenido como un fondo y los diversos
componentes de su programa están pintados en este fondo.
Layout Manager – El gestor de apariencia, alinea los componentes dentro de
panel de contenido con un estilo específico, dependiendo del diseño que usted
elija.
Coordenadas – Cuando no se está utilizando un gestor de apariencia, las
coordenadas se usan para especificar que los componentes se colocan en el
panel de contenido.
Las coordenadas se describen como los gráficos xy de la clase de matemáticas
en la escuela secundaria (X, Y).
Tenga en cuenta que las coordenadas se refieren a la posición de los
componentes en relación a la parte superior izquierda del panel.
Layouts: Como colocar los componentes
FlowLayout : Distribuye los componentes uno al lado del otro en la parte superior del container.
Por defecto provee una alineación centrada, pero también puede alinear a la izquierda o
derecha.
BorderLayout: Divide el espacio del container en 5 regiones: NORTH, SOUTH, EAST, WEST y
CENTER, admite un único componente por región
GridLayout: Divide el espacio del container en una grilla de n filas por m columnas
GridBagLayout: Divide el espacio del container en una grilla donde cada componente puede
ocupar varias filas y columnas. Además permite distribuir el espacio interno de cada celda.
Ejemplo
import java.awt.*;
public class Ventana1 extends Frame {
// defino 3 botones
private Button b1,b2,b3;
public Ventana1(){
// constructor del padre recibe el título de la ventana
super("Esta es la ventana 1");
//Defino el Layout que va a tener la ventana
setLayout(new FlowLayout());
//Instancio el botón 1 y lo agrego al contenedor
b1=new Button("Boton 1");
add(b1);
//Instancio el botón 2 y lo agrego al contenedor
b2=new Button("Boton 2");
add(b2);
//Instancio el botón 3 y lo agrego al contenedor
b3=new Button("Boton 3");
add(b3);
// defino el size de la ventana y la hago visible
setSize(400,300);
setVisible(true); }
public static void main(String[]args){
Ventana1 v1= new Ventana1(); } }
La clase Frame
Nos presenta la típica ventana de Windows
En el código podemos ver que la clase Ventana1 extiende a Frame
Por lo tanto Ventana1 es un Frame y hereda de ésta clase los
métodos setLayout, add, setSize y setVisible
ATRIBUTOS
static int
EXIT_ON_CLOSE
La salida por defecto al cerrar una ventana.
CONSTRUCTORES
JFrame()
Crea un nuevo frame que es inicialmente visible
JFrame(String título)
Crea un nuevo frame con el título indicado como parámetro
MÉTODOS
Tipo de retorno
Método
Descripción
Container
getContentPane()
Retorna el objeto contentPane.
int
getDefaultCloseOperation()
Retorna la operación que ocurre cuando el usuario hace la operación de
cerrar la ventana del frame
JMenuBar
getJMenuBar()
Retorna el menúBar establecido en el frame
void
remove(Component comp)
Remueve el componente indicado como parámetro de éste contenedor
void
setContentPane(Container contentPane)
Establece la propiedad del contentPane
void
setDefaultCloseOperation(int operation)
Establece la operación que sucederá por defecto cuando el usuario cierra la
ventana
void
setJMenuBar(JMenuBar menu)
Establece la barra de menú para el frame
void
setLayout(LayoutManager layout)
Por defecto, la distribución de los paneles de éste componente no debe
cambiarse; en su lugar, debería ser cambiada la distribución de su
contentPane que generalmente es un panel.
Botones a la izquierda
import java.awt.*;
public class Ventana1 extends Frame {
// defino 3 botones
private Button b1,b2,b3;
public Ventana1(){
// constructor del padre recibe el título de la ventana
super("Esta es la ventana 1");
//Defino el Layout que va a tener la ventana
setLayout(new FlowLayout(FlowLayout.LEFT));
//Instancio el botón 1 y lo agrego al contenedor
b1=new Button("Boton 1");
add(b1);
//Instancio el botón 2 y lo agrego al contenedor
b2=new Button("Boton 2");
add(b2);
//Instancio el botón 3 y lo agrego al contenedor
b3=new Button("Boton 3");
add(b3);
// defino el size de la ventana y la hago visible
setSize(400,300);
setVisible(true); }
public static void main(String[]args){
Ventana1 v1= new Ventana1(); } }
Crear una interfaz gráfica de usuario
1. Importación de las bibliotecas de clases necesarias. En este ejemplo, debe
importar javax.swing.JFrame, java.awt.event y java.awt. * .
2. Crear un marco. Su clase Java debe extender la clase JFrame con el fin de
crear el marco de la siguiente manera:
public class RectangleAreaCalculator extends Jframe
3. Además de crear una clase que extiende JFrame, también es necesario definir
algunos atributos de marco como las dimensiones, el título y la visibilidad.
Creación de JFrame
import javax.swing.JFrame;
import java.awt.*;
public class RectangleAreaCalculator extends JFrame
{
private static final int HEIGHT = 300;
private static final int WIDTH = 700;
public RectangleAreaCalculator()
{
setTitle("Cálcula Área de un Rectángulo");
setSize(WIDTH, HEIGHT);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String []args) {
RectangleAreaCalculator v1 = new RectangleAreaCalculator(); }
}
Panel de contenido y gestor de apariencia
4. Crear un panel de contenido. Esto se hace mediante el objeto Contenedor y
esta clase sólo tiene dos métodos (add y setLayout).
5. Usar setLayout para utilizar un gestor de apariencia específico
Container pane = getContentPane();
pane.setLayout(new GridLayout (4, 2));
Agregar componentes
6. Agregar componentes a su programa.
En este ejemplo, sólo se van a utilizar tres componentes conocidos como JLabel,
JTextField y JButton.
Estos deben ser declarados y luego crear instancias
7. Agregar los componentes al panel de contenido utilizando el método
pane.add.
Action Listener
8. Decirle al programa cómo responder cuando un usuario interactúa
con estos componentes. Esto se logra usando el método abstracto
actionPerformed (que requiere registrar un ActionListener).
Elementos
El JFrame crea abajo, en la barra de herramientas de windows (o la de linux) un
botón con el que podemos visualizar, ocultar y cerrar el JFrame, igual que
cualquier otra aplicación
JFrame v = new JFrame ("Ventana hola mundo");
Jlabel: Desplega textos o mensajes estáticos dentro de las formas
JTextField: Permite al operador del programa ingresar una cadena de caracteres
por teclado.
Jbutton: Sirve para crear un botón visible dentro de una aplicación de interfaz
gráfica de usuario.
ActionListener: Es un controlador de eventos que ejecuta una tarea cuando una determinada
acción se lleva a cabo por el usuario.
Esta acción puede ser cualquier cosa que el usuario pueda hacer, como mover el ratón o pulsar
una tecla en el teclado.
setDefaultCloseOperation(): Este método le indica a la ventana qué debe hacer cuando se
cierre pulsando la X.
container
Un Container es un contenedor para los objetos
GUI y, por lo tanto, también para los demás
container.
Se utiliza junto a un Layout Manager y permite
que abarquen más de un GUI (y Contenedores)
Permitiendo que aparezcan varios objetos en
nuestras interfaces.
Ejemplo
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class RectangleAreaCalculator extends JFrame
{
private JLabel lengthLabel, widthLabel, areaLabel;
private JTextField lengthText, widthText, areaText;
private JButton calculateButton, exitButton;
private static final int HEIGHT = 400;
private static final int WIDTH = 700;
private CalculateButtonHandler calculateButtonHandler;
private ExitButtonHandler exitButtonHandler;
public RectangleAreaCalculator()
{
lengthLabel = new JLabel("Teclea la longitud: ");
widthLabel = new JLabel("Teclea el ancho: ");
areaLabel = new JLabel("El área es:", SwingConstants.RIGHT);
lengthText = new JTextField(12);
widthText = new JTextField(12);
areaText = new JTextField(12);
//Esta sección específica los controladores para los botones y añade un ActionListener.
calculateButton = new JButton("¿Cuál es el área?");
calculateButtonHandler = new CalculateButtonHandler();
calculateButton.addActionListener(calculateButtonHandler);
exitButton = new JButton("Close");
exitButtonHandler = new ExitButtonHandler();
exitButton.addActionListener(exitButtonHandler);
setTitle("Área de un Rectángulo");
Container pane = getContentPane();
pane.setLayout(new GridLayout(4, 2) /*FlowLayout()*/);
// El diseño de Grid requiere que agregue componentes al panel de contenido, en el orden en que deben
aparecer
pane.add(lengthLabel);
pane.add(lengthText);
pane.add(widthLabel);
pane.add(widthText);
pane.add(areaLabel);
pane.add(areaText);
pane.add(calculateButton);
pane.add(exitButton);
setSize(HEIGHT, WIDTH);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private class CalculateButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e) // método de la interface ActionListener
{
double width, length, area;
length = Double.parseDouble(lengthText.getText());
width = Double.parseDouble(widthText.getText());
area = length * width;
areaText.setText("" + area);
}
}
public class ExitButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e) // método de la interface ActionListener
{
System.exit(0);
}
}
public static void main(String[] args)
{
RectangleAreaCalculator rectObj = new RectangleAreaCalculator();
}
}
Práctica 16
Hacer un programa con un frame que lea un numero positivo y que posteriormente calcule el
factorial y lo muestre. Utiliza 2 cuadros de dialogo uno para la lectura y otro para mostrar
resultado.
Hacer un programa con frame que lea una cadena en un cuadro y que posteriormente imprima
en otro cuadro si esta es palíndromo o no lo es.
Hacer un programa con un frame para leer una cadena en un cuadro y posteriormente la
imprima en otro cuadro de forma inversa.
Ejemplo:
bordes
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Bordes extends JPanel {
static JPanel creaBorde( Border b ) {
JPanel panel = new JPanel();
String str = b.getClass().toString();
str = str.substring( str.lastIndexOf('.') + 1 );
panel.setLayout( new BorderLayout() );
panel.add(new JLabel( str,JLabel.CENTER ),BorderLayout.CENTER );
panel.setBorder( b );
}
return( panel );
public Bordes() {
setLayout( new GridLayout( 2,4 ) );
add( creaBorde( new TitledBorder("Titulo") ) );
add( creaBorde( new EtchedBorder() ) );
add( creaBorde( new LineBorder(Color.blue) ) );
add( creaBorde( new MatteBorder(5,5,30,30,Color.green) ) );
add( creaBorde( new BevelBorder(BevelBorder.RAISED) ) );
add( creaBorde( new SoftBevelBorder(BevelBorder.LOWERED) ) );
add(creaBorde(new CompoundBorder(
new EtchedBorder(),new LineBorder(Color.red) ) ) );
}
public static void main( String args[] ) {
JFrame frame = new JFrame( "Tutorial de Java, Swing" );
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent evt ){
System.exit( 0 );
}
});
frame.getContentPane().add( new Bordes(),BorderLayout.CENTER );
frame.setSize( 500,300 );
frame.setVisible( true );
}
}
Descargar