Nota del editor: este post describe un sencillo programa Swing que no requiere de absolutamente ninguna librería, y que se conecta con varias cámaras web que publican sus imágenes en Internet. La versión que se describe aquí es una segunda versión creada por el autor mejorando una versión publicada recientemente.
Mencionaremos los arreglos hechos con respecto a la primera entrega:
Ahora mencionaremos algunos aspectos a mejorar:
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 urls = new ArrayList(); public ArrayList camaras = new ArrayList(); 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); } ... }
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(); } } }
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
Nota: noticia enviada por JavaZone