Sei sulla pagina 1di 10

Universidad Nacional de Trujillo Tecnología de la Programación II

Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

COMPONENTES DE LA INTERFAZ GRÁFICA DE USUARIO


Parte II - Código

1. Manejo de eventos de ratón.

package EventosRaton;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class RastreadorRaton extends JFrame


implements MouseListener, MouseMotionListener {
private JLabel barraEstado1;
private JLabel barraEstado2;

public RastreadorRaton() {
super("Demostracion de los eventos de raton");
initComponents();
}

private void initComponents() {


barraEstado1 = new JLabel();
barraEstado2 = new JLabel();
getContentPane().add(barraEstado1, BorderLayout.NORTH);
getContentPane().add(barraEstado2, BorderLayout.SOUTH);
//Registrar manejadores de eventos de raton
//Escucha sus propios eventos de raton
addMouseListener(this);
//Movimientos de raton
addMouseMotionListener(this);
setSize(400,200);
setVisible(true);
}

//Manejadores de eventos de MouseListener


//manejar el evento cuando el botón del ratón se suelta inmediatamente
//después de oprimir
public void mouseClicked(MouseEvent evento) {
barraEstado1.setText("Se hizo clic en ["+evento.getX()+","+evento.getY()+"]");
}

//Manejar evento cuando se oprime el botón del ratón


public void mousePressed(MouseEvent evento) {
barraEstado1.setText("Se oprimió en ["+evento.getX()+","+evento.getY()+"]");
}

//Manejar evento cuando se suelta el botón del ratón después de arrastrar


public void mouseReleased(MouseEvent evento) {
barraEstado1.setText("Se soltó en ["+evento.getX()+","+evento.getY()+"]");
}

//Manejar evento cuando el ratón entra al área


public void mouseEntered(MouseEvent evento) {
barraEstado1.setText("Ratón entró en ["+evento.getX()+","+evento.getY()+"]");
getContentPane().setBackground(Color.GREEN);
}

//Manejar evento cuando el ratón sale del área


public void mouseExited(MouseEvent evento) {
barraEstado1.setText("Ratón fuera de la ventana");
getContentPane().setBackground(Color.WHITE);
}

//Manejadores de eventos de MouseMotionListener


//Manejar el evento cuando el usuario arrastra el ratón con el botón oprimido

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -1-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

public void mouseDragged(MouseEvent evento) {


barraEstado2.setText("Se arrastró en ["+evento.getX()+","+evento.getY()+"]");
}

//Manejar el evento cuando el usuario mueve el ratón


public void mouseMoved(MouseEvent evento) {
barraEstado2.setText("Se movió en ["+evento.getX()+","+evento.getY()+"]");
}

public static void main(String[] args) {


RastreadorRaton aplicacion = new RastreadorRaton();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

2. Clases adaptadoras.

2.1. Clics y botones del ratón.


package ClasesAdaptadoras;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DetallesRaton extends JFrame {


private int xPos, yPos;

public DetallesRaton() {
super("Clics y botones del ratón");
initComponents();
}

private void initComponents() {


addMouseListener(new ManejadorClicsRaton());
setSize(500,200);
setVisible(true);
}

//Dibujar objeto String en la ubicación donde se hizo clic con el ratón


public void paint(Graphics g) {
//Llamar al método paint de la superclase
super.paint(g);
g.drawString("Se hizo clic en: [" + xPos + ", " + yPos + "]", xPos, yPos);
}

public static void main(String[] args) {


DetallesRaton aplicacion = new DetallesRaton();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

//Clase interna privada para el manejo de eventos del ratón


private class ManejadorClicsRaton extends MouseAdapter {
//Manejar evento de clic del ratón y determinar cuál botón se oprimió
public void mouseClicked(MouseEvent evento) {
xPos = evento.getX();
yPos = evento.getY();
String titulo = "Se hizo clic " + evento.getClickCount() + " veces";
//Botón derecho del ratón
if(evento.isMetaDown())
titulo += " con el botón derecho del ratón";
else
//Botón de en medio del ratón
if(evento.isAltDown())
titulo += " con el botón central del ratón";
else

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -2-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

//Botón izquierdo del ratón


titulo += " con el botón izquierdo del ratón";
//Establecer barra de título de la ventana
setTitle(titulo);
repaint();
} //Fin del método mouseClicked
} //Fin de la clase interna
}

2.2. Uso de MouseMotionAdapter.


package ClasesAdaptadoras;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Pintor extends JFrame {


private int cuentaPuntos = 0;
//Arreglo de 1000 referencias a java.awt.Point
private Point puntos[] = new Point[1000];

public Pintor() {
super("Un programa simple de dibujo");
initComponents();
}

private void initComponents() {


//Crear una etiqueta y colocarla en la parte SOUTH del esquema BorderLayout
getContentPane().add(new JLabel("Arrastre el ratón para dibujar"),
BorderLayout.SOUTH);
//Registrar movimientos de raton
addMouseMotionListener(
new MouseMotionAdapter() { //Clase interna anónima
//Almacenar coordenadas de arrastre y llamar a repaint
public void mouseDragged(MouseEvent evento) {
if(cuentaPuntos < puntos.length) {
puntos[cuentaPuntos] = evento.getPoint();
++cuentaPuntos;
repaint();
}
}
} //Fin de la clase interna anónima
); //Fin de la llamada a addMouseMotionListener
setSize(400,200);
setVisible(true);
}

//Dibujar óvalo en un cuadrado delimitador de 4 por 4 en ubicación específica


//en ventana
public void paint(Graphics g) {
//Borra el área de dibujo
super.paint(g);
for(int i=0; i<puntos.length && puntos[i]!=null; i++)
g.fillOval(puntos[i].x, puntos[i].y, 4, 4);
}

public static void main(String[] args) {


Pintor aplicacion = new Pintor();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
3. Manejo de eventos de teclas.
package EventosTeclas;

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -3-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DemoTeclas extends JFrame implements KeyListener {


private String linea1="", linea2="", linea3="";
private JTextArea areaTexto;

public DemoTeclas() {
super("Demostracion de eventos de pulsación de tecla");
initComponents();
}

private void initComponents() {


//Establecer objeto JTextArea
areaTexto = new JTextArea(10, 15);
areaTexto.setText("Oprima cualquier tecla del teclado...");
areaTexto.setEnabled(false);
areaTexto.setDisabledTextColor(Color.BLACK);
getContentPane().add(areaTexto);
//Permitir al marco procesar eventos de tecla
addKeyListener(this);
setSize(500,200);
setVisible(true);
}

//Manejar evento de pulsación de cualquier tecla


public void keyPressed(KeyEvent evento) {
linea1 = "Se oprimió tecla: " + evento.getKeyText(evento.getKeyCode());
setLineas2y3(evento);
}

//Manejar evento de liberación de cualquier tecla


public void keyReleased(KeyEvent evento) {
linea1 = "Se soltó tecla: " + evento.getKeyText(evento.getKeyCode());
setLineas2y3(evento);
}

//Manejar evento de pulsación de una tecla de acción


public void keyTyped(KeyEvent evento) {
linea1 = "Se escribió tecla: " + evento.getKeyChar();
setLineas2y3(evento);
}

//Establecer segunda y tercera líneas de salida


public void setLineas2y3(KeyEvent evento) {
linea2 = "Esta tecla " + (evento.isActionKey()?"":"no ") +
"es una tecla de acción";
String temp = evento.getKeyModifiersText(evento.getModifiers());
linea3 = "Teclas modificadoras oprimidas " + (temp.equals("")?"ninguna":temp);
areaTexto.setText(linea1 + "\n" + linea2 + "\n" + linea3 + "\n");
getContentPane().setBackground(Color.WHITE);
}

public static void main(String[] args) {


DemoTeclas aplicacion = new DemoTeclas();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

4. Manejadores de esquema.

4.1. FlowLayout
package AdministradoresEsquemas;

import java.awt.*;

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -4-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

import java.awt.event.*;
import javax.swing.*;

public class DemoFlowLayout extends JFrame {


private JButton btnIzquierdo, btnCentro, btnDerecho;
private Container contenedor;
private FlowLayout esquema;

public DemoFlowLayout() {
super("Demostración de FlowLayout");
initComponents();
}

private void initComponents() {


esquema = new FlowLayout();
contenedor = getContentPane();
contenedor.setLayout(esquema);
//Establecer objeto btnIzquierdo y registrar componente de escucha
btnIzquierdo = new JButton("Izquierda");
contenedor.add(btnIzquierdo);
btnIzquierdo.addActionListener(
new ActionListener() { //Clase interna anónima
//Procesar evento de btnIzquierdo
public void actionPerformed(ActionEvent evento) {
esquema.setAlignment(FlowLayout.LEFT);
//Realinear componentes adjuntos
esquema.layoutContainer(contenedor);
}
}
);
//Establecer objeto btnCentro y registrar componente de escucha
btnCentro = new JButton("Centro");
contenedor.add(btnCentro);
btnCentro.addActionListener(
new ActionListener() { //Clase interna anónima
//Procesar evento de btnCentro
public void actionPerformed(ActionEvent evento) {
esquema.setAlignment(FlowLayout.CENTER);
//Realinear componentes adjuntos
esquema.layoutContainer(contenedor);
}
}
);
//Establecer objeto btnDerecho y registrar componente de escucha
btnDerecho = new JButton("Derecha");
contenedor.add(btnDerecho);
btnDerecho.addActionListener(
new ActionListener() { //Clase interna anónima
//Procesar evento de btnDerecho
public void actionPerformed(ActionEvent evento) {
esquema.setAlignment(FlowLayout.RIGHT);
//Realinear componentes adjuntos
esquema.layoutContainer(contenedor);
}
}
);
setSize(400,100);
setVisible(true);
}
public static void main(String[] args) {
DemoFlowLayout aplicacion = new DemoFlowLayout();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -5-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

4.2. BorderLayout
package AdministradoresEsquemas;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DemoBorderLayout extends JFrame {


private JButton botones[];
private final String nombres[] = {"Ocultar norte", "Ocultar sur", "Ocultar este",
"Ocultar oeste", "Ocultar centro"};
private BorderLayout esquema;

public DemoBorderLayout() {
super("Demostración de BorderLayout");
initComponents();
}

private void initComponents() {


//Espacios libres de 5 píxeles
esquema = new BorderLayout(5, 5);
Container contenedor = getContentPane();
contenedor.setLayout(esquema);
botones = new JButton[nombres.length];
ManejadorBoton manejador = new ManejadorBoton();
for (int cuenta = 0; cuenta < nombres.length; cuenta++) {
botones[cuenta] = new JButton(nombres[cuenta]);
botones[cuenta].addActionListener(manejador);
}
//Colocar botones en BorderLayout; no importa el orden
contenedor.add(botones[0], BorderLayout.NORTH);
contenedor.add(botones[1], BorderLayout.SOUTH);
contenedor.add(botones[2], BorderLayout.EAST);
contenedor.add(botones[3], BorderLayout.WEST);
contenedor.add(botones[4], BorderLayout.CENTER);
setSize(400, 300);
setVisible(true);
}

//Clase interna privada para el manejo de eventos de botón


private class ManejadorBoton implements ActionListener {
public void actionPerformed(ActionEvent evento) {
for (int cuenta = 0; cuenta < botones.length; cuenta++) {
if (evento.getSource() == botones[cuenta])
botones[cuenta].setVisible(false);
else
botones[cuenta].setVisible(true);
}
esquema.layoutContainer(getContentPane());
}
}

public static void main(String[] args) {


DemoBorderLayout aplicacion = new DemoBorderLayout();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
4.3. GridLayout.
package AdministradoresEsquemas;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DemoGridLayout extends JFrame {


private JButton botones[];

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -6-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

private final String nombres[] = {"uno","dos","tres","cuatro","cinco","seis"};


private boolean alternar = true;
private Container contenedor;
private GridLayout cuadricula1, cuadricula2;

public DemoGridLayout() {
super("Demostración de GridLayout");
initComponents();
}

private void initComponents() {


//Establecer esquemas
cuadricula1 = new GridLayout(2, 3, 5, 5);
cuadricula2 = new GridLayout(3, 2);
contenedor = getContentPane();
contenedor.setLayout(cuadricula1);
botones = new JButton[nombres.length];
ManejadorBoton manejador = new ManejadorBoton();
for (int cuenta = 0; cuenta < nombres.length; cuenta++) {
botones[cuenta] = new JButton(nombres[cuenta]);
botones[cuenta].addActionListener(manejador);
contenedor.add(botones[cuenta]);
}
setSize(400, 300);
setVisible(true);
}

//Clase interna privada para el manejo de eventos de botón


private class ManejadorBoton implements ActionListener {
public void actionPerformed(ActionEvent evento) {
if (alternar)
contenedor.setLayout(cuadricula2);
else
contenedor.setLayout(cuadricula1);
//Establecer alternar en el valor opuesto
alternar = !alternar;
contenedor.validate();
}
}

public static void main(String[] args) {


DemoGridLayout aplicacion = new DemoGridLayout();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

5. Paneles.

5.1. Uso de JPanel


package Paneles;
import java.awt.*;
import javax.swing.*;

public class DemoPanel extends JFrame {


private JPanel panelBotones;
private JButton botones[];

public DemoPanel() {
super("Demostración de JPanel");
initComponents();
}

private void initComponents() {


Container contenedor = getContentPane();
//Crear arreglo de botones

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -7-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

botones = new JButton[5];


//Configurar panel y establecer su esquema
panelBotones = new JPanel();
panelBotones.setLayout(new GridLayout(1, botones.length));
//Crear y agregar botones
for (int cuenta = 0; cuenta < botones.length; cuenta++) {
botones[cuenta] = new JButton("Botón " + (cuenta + 1));
panelBotones.add(botones[cuenta]);
}
contenedor.add(panelBotones, BorderLayout.SOUTH);
setSize(400, 300);
setVisible(true);
}

public static void main(String[] args) {


DemoPanel aplicacion = new DemoPanel();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

5.2. JPanel personalizado.


package Paneles;

import java.awt.*;
import javax.swing.*;

public class PanelOvalo extends JPanel {


private int diametro = 10;

//Dibujar un óvalo del diámetro especificado


public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(10, 10, diametro, diametro);
}

//Validar y establecer el diámetro, después pintar nuevamente


public void setDiametro(int nuevoDiametro) {
//Si el diámetro es inválido, usar valor predeterminado
this.diametro = nuevoDiametro>=0?nuevoDiametro:10;
repaint();
}

//Utilizado por el administrador de esquema para determinar el tamaño preferido


public Dimension getPreferredSize() {
return new Dimension(200, 200);
}

//Utilizado por el administrador de esquema para determinar el tamaño mínimo


public Dimension getMinimumSize() {
return getPreferredSize();
}
}

6. Más componentes.

6.1. Uso de JTextArea


package MasComponentes;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -8-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

public class DemoAreaTexto extends JFrame {


private JTextArea areaTexto1, areaTexto2;
private JButton btnCopiar;

public DemoAreaTexto() {
super("Demostración de JTextArea");
initComponents();
}

private void initComponents() {


Box cuadro = Box.createHorizontalBox();
String cadena = "Esta es una cadena de\ndemostración para\n" +
"ilustrar cómo copiar texto\nde un área de texo a\n" +
"otra, utilizando un evento externo\n";
//Establecer areaTexto1
areaTexto1 = new JTextArea(cadena, 10, 15);
cuadro.add(new JScrollPane(areaTexto1));
//Establecer boton para copiar
btnCopiar = new JButton("Copiar >>>");
cuadro.add(btnCopiar);
btnCopiar.addActionListener(
new ActionListener() { //Clase interna anónima
//Establecer en areaTexto2 el texto seleccionado de areaTexto1
public void actionPerformed(ActionEvent evento) {
areaTexto2.setText(areaTexto1.getSelectedText());
}
}
);
//Establecer areaTexto2
areaTexto2 = new JTextArea(10, 15);
areaTexto2.setEditable(false);
cuadro.add(new JScrollPane(areaTexto2));
//Agregar cuadro al panel de contenido
Container contenedor = getContentPane();
//Colocar en BorderLayout.CENTER
contenedor.add(cuadro);
setSize(500,200);
setVisible(true);
}

public static void main(String[] args) {


DemoAreaTexto aplicacion = new DemoAreaTexto();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

6.2. Uso de JSlider.


package MasComponentes;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import Paneles.PanelOvalo;

public class DemoSlider extends JFrame {


private JSlider sldDiametro;
private PanelOvalo miPanel;

public DemoSlider() {
super("Demostración de JSlider");
initComponents();
}

private void initComponents() {


//Establecer PanelOvalo
miPanel = new PanelOvalo();

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -9-


Universidad Nacional de Trujillo Tecnología de la Programación II
Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte II

miPanel.setBackground(Color.YELLOW);
//Establecer objeto JSlider para controlar el valor del diámetro
sldDiametro = new JSlider(SwingConstants.HORIZONTAL, 0, 200, 10);
sldDiametro.setMajorTickSpacing(10);
sldDiametro.setPaintTicks(true);
//Registrar componente de escucha de JSlider
sldDiametro.addChangeListener(
new ChangeListener() { //Clase interna anónima
//Establecer cambio en el valor del control deslizable
public void stateChanged(ChangeEvent evento) {
miPanel.setDiametro(sldDiametro.getValue());
}
}
);
//Adjuntar componentes al panel de contenido
Container contenedor = getContentPane();
contenedor.add(sldDiametro, BorderLayout.SOUTH);
contenedor.add(miPanel, BorderLayout.CENTER);
setSize(400,200);
setVisible(true);
}

public static void main(String[] args) {


DemoSlider aplicacion = new DemoSlider();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 10 -