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
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
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
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
- roger1345's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
+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.