Seguidores

MIS WEBS



Mostrando entradas con la etiqueta LAMINA. Mostrar todas las entradas
Mostrando entradas con la etiqueta LAMINA. Mostrar todas las entradas

domingo, 7 de enero de 2018

CREAR UN BOTÓN EN UN A LAMINA DE UNA MARCO DE JAVA

       

Como crear un botón en java utilizando la clase JButton

   Un evento constituye un método para que una clase notifique a los usuarios de un objeto que algo interesante le sucede, como, por ejemplo, que se ha hecho clic en un control de una interfaz gráfica de usuario. Esta notificación se denomina provocar un evento, este evento desencadenará una acción.


        En este caso el evento es hacer clic, pero dependiendo de en qué botón hagamos clic la acción que se desencadena es diferente. No es lo mismo hacer clic en el botón de grabar de un formulario que hacer clic en el de cerrar. Pero el evento sí que es el mismo hacer clic.

Para programar en java eventos nos resultaran necesarios 3 objetos:
1. Que desencadenante de la acción (hacer clic, cerrar ventana, cargar el programa.. )

¿Cual es el OBJETO EVENTO?


2. Quien desencadena la acción (que botón toco el usuario, que venta cerro, que programa cerro…)

¿Cual es el OBJETO FUENTE?



3. Quién recibe la acción , cuando hagamos clic en el botón X sobre que objeto se desencadenara la acción(la ventana, el programa, el formulario, la impresora..)

OBJETO LISTENER implementa la interface ActionListener



Ejemplo.
Nosotros tenemos un formulario con un botón guardar y el usuario lo clica para cerrar el programa.
OBJETO EVENTO  Hacer clic
OBJETO FUENTE = El botón rojo, amarillo o azul
OBJETO LISTENER = La lamina
ACCIÓN = Modificar color de la lámina (setBackground)

Como crear un botón (button)


Para crear el botón en la lámina necesitamos la clase JBuuton, creamos un objeto de la clase JBuuton y con el método add() lo cargamos en el constructor;


class Lamina6 extends JPanel{
      
       private Image foto;
       JButton PrimerBoton= new JButton ("CERRAR");
      
       // constructor donde hacemos visible el boton
       public Lamina6() {
             add(PrimerBoton);
       }



Ejercicio:


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ddd {
      
       public static void main(String[] args) {
             Marco10 mimarco10 = new Marco10();
             mimarco10.setVisible(true);
             mimarco10.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
      
}

class Marco10 extends JFrame{
       public Marco10() {
             setTitle("ESTE ES NUESTRO MARCO");
             setBounds (700,300,500,300);
             Lamina colores = new Lamina();
             add(colores);
       }
      
}

class Lamina extends JPanel implements ActionListener{
       JButton botonAzul = new JButton("Azul");
       JButton botonRojo = new JButton("Rojo");
       JButton botonAmarillo = new JButton("Amarillo");
      
       public Lamina() {
             add(botonAzul);
             add(botonRojo);
             add(botonAmarillo);
             botonAzul.addActionListener(this);//el oyente es la lamina (this)
             botonRojo.addActionListener(this);
             botonAmarillo.addActionListener(this); 
       }
       public void actionPerformed(ActionEvent e) {
Object FUENTE = e.getSource();
            
             if (FUENTE == botonAzul) {setBackground(Color.blue);}
             else if (FUENTE == botonRojo) {setBackground(Color.RED);}
             else if (FUENTE == botonAmarillo) {setBackground(Color.YELLOW);}         
       }
}

También lo podríamos hacer así:

public void actionPerformed(ActionEvent e) {
              switch (e.getActionCommand()) {
                case "Azul":     setBackground(Color.blue);              break;
                case "Amarillo": setBackground(Color.yellow);      break;
                case "Rojo":            setBackground(Color.red);         break;
                default:             break;
                }
}

sábado, 6 de enero de 2018

HACER UN MOSAICO DENTRO DE UNA LAMINA DE UN MARCO EN JAVA



En ocasiones desearíamos realizar un mosaico con una foto dentro de una lámina de un frame, en el siguiente ejercicio, utilizaremos los métodos getHeight (obten Altura)  y  getWidth (obten Ancho) para preguntar a nuestro ordenador el tamaño de la foto seleccionada, los guardaremos en dos variables que mas  tarde poder utilizarlas en otro método copyArea() al que le pasaremos por parámetros las variables que hemos obtenido con el alto y el ancho de nuestra foto.

Utilizaremos un for anidado para ir copiando hasta que no quepan mas fotos en nuestro marco.

Recordaremos los parámetros del copyAea():





Cuando posicionemos la primera vez nuestra foto con drawImage() le diremos que X=0 e Y =0, para que la coloque en el borde superior de nuestro panel.


Y con el for anidado la iremos clonando por toda la lamina


for (int i=0;i<pondremos el alto de nuestra lamina;i++) {
for (int j=0;j<pondremos el ancho de nuestra lamina;;j++) {
g.copyArea(0, 0, AnchoFoto, AltoFoto, AnchoFoto*i, AltoFoto*j);
}
}
}




Veamos al completo:

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

public class practica5_frame {

public static void main(String[] args) {
Marco6 marco = new Marco6();
marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
marco.setVisible(true);
}
}

class Marco6  extends JFrame{
public Marco6() {
setTitle ("marco con dibujos");
setBounds(400,200,700,400); 
Lamina6 lamina = new Lamina6();
add(lamina);
}
}

class Lamina6 extends JPanel{
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.GRAY);
File ruta = new File("images2.jpg");
try { //tratamineto de excepciones, haz esto y si no catch
foto = ImageIO.read(ruta); 
catch(IOException e) { 
JOptionPane.showConfirmDialog(null, "no esta la foto");
}
/*creamos dos var y le solicitamos al ordenador que nos diga getheight obten alto Foto y ancho, el parametro this indica que deseamos obtener el de nuestra foto actual*/
int AltoFoto =foto.getHeight(this);
int AnchoFoto= foto.getWidth(this);
//escribimos la foto en nuestra lamina
g.drawImage(foto, 0, 0, null); 
//bucle for anidado en el que vamos pegando la foto tatas veces como sea necesario has completar nuestro panel
for (int i=0;i<400;i++) {
for (int j=0;j<700;j++) {
g.copyArea(0, 0, AnchoFoto, AltoFoto, AnchoFoto*i, AltoFoto*j);
}
}
}
private Image foto;
}

Buscar este blog

Sandisk y Western Digital