style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Java Zone Espia Web, Segunda Entrega

Java Zone Espia Web, Segunda Entrega

Mencionaremos los arreglos hechos con respecto a la primera entrega:

-Se carga la ventana mas rápido.
-Se puede seleccionar una cámara y ver en tamaño completo.
-Las imágenes se extienden al tamaño total de la ventana.
-Mayor velocidad de refresco de la secuencia de imágenes.
-Icono de cámara, que muestra que hay una cámara cargando y que se mostrara en instantes.

Ahora mencionaremos algunos aspectos a mejorar:

-Mayor cantidad de cámaras para ver.
-Que podamos automatizar la búsqueda de cámaras activas en Internet y que el programa las muestre.
-Poder escoger favoritos y que guarde las preferencias por usuario.
-Mejorar la interfaz, mas opciones.

Imagenes



Codigo

Clase Principal

package clases;

import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Principal extends JFrame {

    public JPanel panelPrincipal;
    public ArrayList<String> urls = new ArrayList<String>();
    public ArrayList<PanelCamara> camaras = new ArrayList<PanelCamara>();

    public Principal() {

        urls.add("http://146.186.123.229/axis-cgi/jpg/image.cgi?resolution=352x240");
        urls.add("http://131.111.133.11/axis-cgi/jpg/image.cgi?resolution=480x360&dummy=1267804722739");
        urls.add("http://fotogermanoviseu.dyndns.info/axis-cgi/jpg/image.cgi?resolution=640x480&compression=10&color=1&clock=1&date=1");
        urls.add("http://198.82.159.134/axis-cgi/jpg/image.cgi?resolution=640x480&dummy=1152818432828");
        urls.add("http://98.238.252.97/axis-cgi/jpg/image.cgi?resolution=800x600&dummy=1280477002758");
        urls.add("http://80.24.195.19/axis-cgi/jpg/image.cgi?resolution=480x360");
     urls.add("http://216.8.159.21/axis-cgi/jpg/image.cgi?resolution=640x480");
        urls.add("http://hncam1.hn.psu.edu/axis-cgi/jpg/image.cgi?resolution=320x240");

        panelPrincipal = new JPanel();
        panelPrincipal.setLayout(new GridLayout(2, 4, 5, 5));
        for (int i = 0; i < urls.size(); i++) {
                PanelCamara pc = new PanelCamara(i,urls.get(i),this);                
                panelPrincipal.add(pc);
                camaras.add(pc);
        }
        add(panelPrincipal);
    }
   
    public void DesactivarHilos(){
     for(int i=0;i<camaras.size();i++){
   camaras.get(i).hf.stop();
   camaras.get(i).PararHilo();
     }
    }
   
    public void ActivarHilos(){
     for(int i=0;i<camaras.size();i++){
      camaras.get(i).IniciarHilo();
     }
    }
   
    public void AgregarPaneles(){
     for(int i=0;i<camaras.size();i++){
      panelPrincipal.add(camaras.get(i));
     }
     panelPrincipal.updateUI();
     repaint();
    }

    public static void main(String arg[]) {

        Principal p = new Principal();
        p.setVisible(true);
        p.setBounds(0, 0, 600, 250);
        p.setLocationRelativeTo(null);
        p.setTitle("Java Zone Espia Web");
        p.setDefaultCloseOperation(EXIT_ON_CLOSE);

    }
}

Clase PanelCamara

package clases;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class PanelCamara extends JPanel {

    String url = "";
    int id=0;
    Image img;
    Principal prin;
    HiloFoto hf;
    boolean seleccionado=false;

    public PanelCamara(int id,String url, Principal p) {
        this.url = url;
        this.prin=p;
        this.id=id;
        addMouseListener(new MouseListener() {
   
   @Override
   public void mouseReleased(MouseEvent e) {
   
   }
   
   @Override
   public void mousePressed(MouseEvent e) {
   
   }
   
   @Override
   public void mouseExited(MouseEvent e) {
   
   }
   
   @Override
   public void mouseEntered(MouseEvent e) {
   
   }
   
   @Override
   public void mouseClicked(MouseEvent e) {
    if(seleccionado){
     seleccionado=false;
    }else{
     seleccionado=true;
    }
    if(seleccionado){
     prin.DesactivarHilos();
     hf=new HiloFoto(PanelCamara.this);
           hf.start();
     prin.panelPrincipal.removeAll();
     prin.panelPrincipal.setLayout(new BorderLayout());
     prin.panelPrincipal.add(prin.camaras.get(PanelCamara.this.id));
     prin.setBounds(0, 0, 500, 400);
     prin.setLocationRelativeTo(null);
    }else{
     hf.stop();
     hf=null;
     prin.panelPrincipal.removeAll();
     prin.panelPrincipal.setLayout(new GridLayout(2, 4, 5, 5));
     prin.AgregarPaneles();
     prin.ActivarHilos();
     prin.setBounds(0, 0, 600, 250);
     prin.setLocationRelativeTo(null);
    }
   }
  });
        img = new ImageIcon(this.getClass().getResource("/lib/webcam.png")).getImage();
        this.setDoubleBuffered(true);
        IniciarHilo();
    }
   
    public void PararHilo(){
     hf=null;
    }
   
    public void IniciarHilo(){
     hf=new HiloFoto(this);
        hf.start();
    }

    @Override
    public void paintComponent(Graphics g) {
            super.paintComponents(g);
            g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
    }
}

Clase HiloFoto

package clases;

import java.awt.Image;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;

public class HiloFoto extends Thread{
 
 PanelCamara pc;
 
 public HiloFoto(PanelCamara pc){
  this.pc=pc;
 }
 
 public void run(){
  try {
   Thread.sleep(500);
   while(true){
    pc.img.flush();
    pc.img=new ImageIcon(new URL(pc.url)).getImage();
    pc.repaint();
    pc.updateUI();
    Thread.sleep(500);
   }
  } catch (InterruptedException e) {
   e.printStackTrace();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  }
 }
}

Descargar

El proyecto completo lo pueden descargar desde aquí, se incluyen los archivos fuentes, las imágenes y el Jar ejecutable.

Recuerden visitarnos en Java Zone

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

+1 Deberías considerar crear

+1 Deberías considerar crear tu cuenta en GitHub y publicar tu código ahí.

Ya reviso esto cuando llegue a casa, saludos.

Estoy en eso :)

La verdad nunca he usado este tipo de herramientas, ni GitHub, SourceForce, o algo parecido, estoy en fase de entrenamiento por asi decirlo.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">