Algoritmia y Programación Oscar Bedoya [email protected] http://eisc.univalle.edu.co/~oscarbed/Algoritmia/ ¿Cuántos botones se necesitan? import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TTT extends JFrame implements ActionListener{ contenedor = getContentPane(); miFlow = new FlowLayout(); contenedor.setLayout(miFlow); B1.addActionListener(this); B2.addActionListener(this); Container contenedor; B3.addActionListener(this); FlowLayout miFlow; B4.addActionListener(this); JLabel LGanador; B5.addActionListener(this); JButton B1,B2,B3,B4,B5,B6,B7,B8,B9, BR; B6.addActionListener(this); B7.addActionListener(this); TTT(){ B8.addActionListener(this); LGanador = new JLabel("GANADOR: Desconocido "); B9.addActionListener(this); B1 = new JButton(" "); BR.addActionListener(this); B2 = new JButton(" "); contenedor.add(B1); B3 = new JButton(" "); contenedor.add(B2); B4 = new JButton(" "); contenedor.add(B3); B5 = new JButton(" "); contenedor.add(B4); B6 = new JButton(" "); contenedor.add(B5); B7 = new JButton(" "); contenedor.add(B6); B8 = new JButton(" "); contenedor.add(B7); B9 = new JButton(" "); contenedor.add(B8); BR = new JButton(" Reiniciar juego "); contenedor.add(B9); contenedor.add(LGanador); contenedor.add(BR);} /TTT2.java • Cuando necesite agrupar un conjunto de elementos dentro de un JFrame, debe utilizar un JPanel JPanel que agrupa los botones JPanel Encuesta.java Elementos de una GUI: - JLabel - JTextField - JButton - Container - FlowLayout Elementos de una GUI: - JLabel - JTextField - JButton - Container - FlowLayout Cada elemento se debe * Declarar * Crear Elementos de una GUI: - JLabel - JTextField - JButton - Container - FlowLayout - JPanel Elementos de una GUI: - JLabel - JTextField - JButton - Container - FlowLayout - JPanel ¿Cómo declarar y crear un JPanel? • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); El panel permite que se agrupen algunos elementos de la ventana panel1 panel1 panel2 • Panel (JPanel) panel1 Declarar un panel: JPanel panel1, panel2; Crear un panel: panel1 = new JPanel(); panel2 = new JPanel(); panel2 Para organizar los componentes se pueden usar dos clases: - FlowLayout - GridLayout Para organizar los componentes se pueden usar dos clases: - FlowLayout (Container) - GridLayout (JPanel) GridLayout: permite organizar los elementos en una rejilla Rejilla o GridLayout de 3 filas y 3 columnas GridLayout: permite organizar los elementos en una rejilla Rejilla o GridLayout de 3 filas y 3 columnas GridLayout: permite organizar los elementos en una rejilla ¿Cuáles deben ser las dimensiones de esta rejilla? GridLayout: permite organizar los elementos en una rejilla Rejilla de 4 filas y 2 columnas GridLayout: permite organizar los elementos en una rejilla ¿Cuáles deben ser las dimensiones de esta rejilla? GridLayout: permite organizar los elementos en una rejilla Rejilla de 1 fila y 2 columnas GridLayout: permite organizar los elementos en una rejilla ¿Cuáles deben ser las dimensiones de esta rejilla? GridLayout: permite organizar los elementos en una rejilla Rejilla de 2 filas y 3 columnas • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); El panel permite que se agrupen algunos elementos de la ventana • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); Establecer el GridLayout: panel1.setLayout(new GridLayout(3,3)); Filas y columnas de la rejilla • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); Establecer el GridLayout: panel1.setLayout(new GridLayout(3,3)); Filas y columnas de la rejilla • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); Establecer el GridLayout: panel1.setLayout(new GridLayout(?,?)); • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); Establecer el GridLayout: panel1.setLayout(new GridLayout(4,2)); • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); Establecer el GridLayout: panel1.setLayout(new GridLayout(?,?)); • Panel (JPanel) Declarar un panel: JPanel panel1; Crear un panel: panel1 = new JPanel(); Establecer el GridLayout: panel1.setLayout(new GridLayout(2,3)); Problema: Complete la declaración y creación de elementos de la siguiente GUI • Declarar los elementos: • Crear los elementos: • Declarar los elementos: JLabel ? JTextField ? JButton ? JPanel ? Container contenedor; FlowLayout miFlow; • Declarar los elementos: JLabel LGanador; JButton B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,BR; JPanel panel1; Container contenedor; FlowLayout miFlow; • Crear los elementos: LGanador=new JLabel(“GANADOR: Desconocido”); B1=new JButton(“ “); B2=new JButton(“ “); B3=new JButton(“ “); B4=new JButton(“ “); B5=new JButton(“ “); B6=new JButton(“ “); B7=new JButton(“ “); B8=new JButton(“ “); B9=new JButton(“ “); B10=new JButton(“ “); BR=new JButton(“Reiniciar juego“); Botón B1 Botón B2 Botón B3 Botón B4 Botón B5 Botón B6 Botón B7 Botón B8 Botón B9 ¿Cómo colocar los botones en el JPanel? • Crear los elementos: panel1 = new JPanel(); panel1.setLayout(new GridLayout(3,3)); • Crear los elementos: panel1 = new JPanel(); panel1.setLayout(new GridLayout(3,3)); panel1.add(B1); panel1.add(B2); panel1.add(B3); panel1.add(B4); panel1.add(B5); panel1.add(B6); panel1.add(B7); panel1.add(B8); panel1.add(B9); • Crear los elementos: panel1 = new JPanel(); panel1.setLayout(new GridLayout(3,3)); panel1.add(B1); panel1.add(B2); panel1.add(B3); panel1.add(B4); panel1.add(B5); panel1.add(B6); panel1.add(B7); panel1.add(B8); panel1.add(B9); Se utiliza add() para adicionar los elementos al panel Botón B1 Botón B2 Botón B3 Botón B4 Botón B5 Botón B6 Botón B7 Botón B8 Botón B9 panel1 = new JPanel(); panel1.setLayout(new GridLayout(3,3)); panel1.add(B1); panel1.add(B2); panel1.add(B3); panel1.add(B4); panel1.add(B5); panel1.add(B6); panel1.add(B7); panel1.add(B8); panel1.add(B9); Se debe adicionar el panel1 al contenedor contenedor.add(panel1); Se debe adicionar el panel1 al contenedor • Crear los elementos: panel1 = new JPanel(); panel1.setLayout(new GridLayout(3,3)); panel1.add(B1); panel1.add(B2); panel1.add(B3); panel1.add(B4); panel1.add(B5); panel1.add(B6); panel1.add(B7); panel1.add(B8); panel1.add(B9); contenedor.add(panel1); panel1 = new JPanel(); panel1.setLayout(new GridLayout(3,3)); panel1.add(B1); panel1.add(B2); panel1.add(B3); panel1.add(B4); panel1.add(B5); panel1.add(B6); panel1.add(B7); panel1.add(B8); panel1.add(B9); contenedor.add(panel1); contenedor.add(LGanador); contenedor.add(BR); panel1 = new JPanel(); panel1.setLayout(new GridLayout(3,3)); panel1.add(B1); panel1.add(B2); panel1.add(B3); panel1.add(B4); panel1.add(B5); panel1.add(B6); panel1.add(B7); panel1.add(B8); panel1.add(B9); contenedor.add(panel1); contenedor.add(LGanador); contenedor.add(BR); *TTT.java Problema: Complete la declaración y creación de los paneles panel1 con rejilla de 4 filas y 2 columnas panel2 con rejilla de 1 fila y 2 columnas *Encuesta.java Problema: Complete la declaración y creación de los paneles LNombre LCodigo LSexo LCarrera BIngresar TFNombre TFCodigo TFSexo TFCarrera BPregunta1 TFNombre TFCodigo TFSexo TFCarrera LNombre LCodigo LSexo LCarrera BPregunta1 BIngresar panel1 = new JPanel(); panel2 = new JPanel(); panel1.setLayout(new GridLayout(?,?)); panel2.setLayout(new GridLayout(?,?)); panel1.add(?); panel2.add(?); ... ... Encuesta.java Problema: presente el oyente de tal forma que se calculen 3 datos: el total a pagar (DVD a $23000 y Blu-ray a $65000), el IVA y la ganancia neta (total-IVA) JTextField (TFDVD) JTextField (TFBluray) JButton (BCalcular) JTextField (TFValor) JTextField (TFIVA) JTextField (TFGanancia) VentaPeliculas.java public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ } } JButton (BCalcular) DVD $23000 Blu-ray $65000 JTextField (TFDVD) JTextField (TFBluray) JTextField (TFValor) JTextField (TFIVA) JTextField (TFGanancia) public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ int dvd, bluray, valor; double iva, ganancia; dvd=Integer.parseInt(TFDVD.getText()); bluray=Integer.parseInt(TFBluray.getText()); valor = dvd*23000 + bluray*65000; iva = valor * 0.16; ganacia = valor – iva; TFValor.setText(String.valueOf(valor)); TFIVA.setText(String.valueOf(iva)); TFGanancia.setText(String.valueOf(ganancia)); } } Operaciones matemáticas: double a,b,c,d,e; a = Math.sin(45); b = Math.cos(90); c = Math.tan(37); d = Math.pow(3,5); e = Math.sqrt(5); Problema: presente el oyente de tal forma que se puedan calcular 3 valores: sin(x), cos(x) y raiz(x). El valor se debe mostrar en el campo de texto TFResultado JTextField (TFx) JTextField (TFResultado) ProgramaMath.java public void actionPerformed(ActionEvent e){ if (e.getSource()==BSin){ } if (e.getSource()==BCos){ } if (e.getSource()==BRaiz){ } } JTextField (TFx) JTextField (TFResultado) public void actionPerformed(ActionEvent e){ if (e.getSource()==BSin){ } } JTextField (TFx) JTextField (TFResultado) public void actionPerformed(ActionEvent e){ if (e.getSource()==BSin){ int x; double sen; x=Integer.parseInt(TFx.getText()); sen = Math.sin(x); TFResultado.setText(String.valueOf(sen)); } } JTextField (TFx) JTextField (TFResultado) Problema: presente el oyente de tal forma que se pueda calcular la distancia euclidiana entre dos puntos (x1,y1) y (x2,y2), definida como d ( x2 x1 ) 2 ( y2 y1 ) 2 JTextField (TFx1) JTextField (TFy1) JTextField (TFx2) JTextField (TFy2) JButton (BDistancia) JTextField (TFResultado) Distancia.java public void actionPerformed(ActionEvent e){ if (e.getSource()==BDistancia){ } } JTextField (TFx1) JTextField (TFy1) JTextField (TFx2) JTextField (TFy2) JButton (BDistancia) JTextField (TFResultado) public void actionPerformed(ActionEvent e){ if (e.getSource()==BDistancia){ int x1,y1,x2,y2; double d; x1 = Integer.parseInt(TFx1.getText()); y1 = Integer.parseInt(TFy1.getText()); x2 = Integer.parseInt(TFx2.getText()); y2 = Integer.parseInt(TFy2.getText()); d = Math.sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) ); TFResultado.setText(String.valueOf(d)); } } Problema: presente el oyente de tal forma que se pueda hacer la traducción de 5 palabras de español a inglés JTextField (TFEspañol) JButton (BTraducir) JTextField (TFTraduccion) Traductor.java public void actionPerformed(ActionEvent e){ if (e.getSource()==BTraducir){ } } JTextField (TFEspañol) JButton (BTraducir) JTextField (TFTraduccion) public void actionPerformed(ActionEvent e){ if (e.getSource()==BTraducir){ String palabra, traduccion; palabra = TFEspañol.getText(); if (palabra.equals(“Raton”)){ traduccion = “Mouse”; } if (palabra.equals(“Profesor”)){ traduccion = “Teacher”; } TFTraduccion.setText(traduccion); } } Problema: presente el oyente de tal forma que se calcule el valor de la llamada JTextField (TFOperador) JTextField (TFDuracion) JButton (BCalcular) JTextField (TFValor) Minutos.java • El valor de la llamada se calcula de acuerdo al operador teniendo en cuenta los valores que se muestran en la siguiente tabla: public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ } } JTextField (TFOperador) JTextField (TFDuracion) JButton (BCalcular) JTextField (TFValor) public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ String operador; int duracion, valor; operador=TFOperador.getText(); duracion=Integer.parseInt(TFDuracion.getText()); if (operador.equals(“Tigo”)){ valor = duracion*150; }... TFValor.setText(String.valueOf(valor)); } } Problema: presente el oyente de tal forma que se calculen 2 datos: el total a pagar y el valor correspondiente al pago del seguro JTextField (TFEdad) JTextField (TFSexo) JTextField (TFMeses) JButton (BCalcular) JTextField (TFValor) JTextField (TFSeguro) Gimnasio.java • El valor de la mensualidad se calcula usando la siguiente tabla • El pago del seguro es el 8% del total a pagar public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ } } JTextField (TFEdad) JTextField (TFSexo) JTextField (TFMeses) JButton (BCalcular) JTextField (TFValor) JTextField (TFSeguro) public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ int edad, mensualidad, meses; String sexo; double seguro; edad=Integer.parseInt(TFEdad.getText()); sexo=TFSexo.getText(); meses=Integer.parseInt(TFMeses.getText()); if (edad<18 && sexo.equals(“Masculino”)){ mensualidad = meses*32000; seguro = mensualidad*0.08; }... TFValor.setText(String.valueOf(mensualidad)); TFSeguro.setText(String.valueOf(seguro)); } } Problema: presente el oyente de tal forma que se calculen 2 datos: la categoría y el valor a pagar JTextField (TFEdad) JTextField (TFMeses) JButton (BCalcular) JTextField (TFCategoria JTextField (TFValor) Tenis.java • La categoría y el valor del mes dependen de la edad y se calculan usando la siguiente tabla public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ } } JTextField (TFEdad) JTextField (TFMeses) JButton (BCalcular) JTextField (TFCategoria JTextField (TFValor) public void actionPerformed(ActionEvent e){ if (e.getSource()==BCalcular){ int edad, meses, valor; String categoria; edad=Integer.parseInt(TFEdad.getText()); meses=Integer.parseInt(TFMeses.getText()); if (edad<12){ categoria = “ Infantil “; valor = meses * 43000; }... TFCategoria.setText(categoria); TFValor.setText(String.valueOf(valor)); } } Actividad Fecha Entrega del proyecto Viernes 15 de Junio Sustentación Hasta el Vienes 22 de Junio (Martes y Jueves de 8:00 a 12:00 y de 2:00 a 4:30), Viernes de 8:00 a 11:30 Laboratorio 5 Viernes 22 de Junio Parcial2 Lunes 25 de Junio Opcional2 Sábado 30 de Junio