Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - LKI

#61
Java / [Libro JAVA] Java a Fondo!!
Octubre 28, 2014, 12:54:51 AM

  • Libro avanzado de programación en Java haciendo uso de la metodología orientada a objetos.


                                           



    • Editorial: Alfaomega

      • Autor: Pablo Augusto Sznajdleder

      • Paginas: 446

      • Calidad: Excelente (Recomendado)

    • Nivel: Medio - Avanzado


Link ->No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#62
DEEEEESCARGANDOOOO me encanta el tema de la reutilizacion de sotfware y los patrones de diseño Orientado a objetos :D
#63
Buenísimo bajando y a darle un vistazo..
Gracias por el aporte!
#64
Java / Factory Method Java
Octubre 21, 2014, 02:14:34 AM
Buenas gente, en este nuevo tutorial tratare de implementar y explicar lo que se conoce como "Factory Method". Veamos que dice la WIKIPEDIA:
CitarEl patrón de diseño Factory Method consiste en utilizar una clase constructora  dedicado a la construcción de objetos de un subtipo de un tipo determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta clase abstracta, tendremos uno u otro comportamiento.

Beneficios:

  • Evitamos hardcodear métodos y objetos.
  • Permite desacoplar la implementación de los métodos
  • Abstracción y legibilidad de código
  • Permite la reutilización de código
Manos a la obra..

  • Empezaremos creando un conjunto de clases modelos-bases para poder implementar y explicar nuestro ejemplo:
Código: java




public class Telefono {

//ATRIBUTOS Y METODOS...

public Telefono() {
// MÁS CODIGO POR ACA
}

}


public class Paloma extends Ave{

//ATRIBUTOS Y METODOS...

public Paloma() {
// MÁS CODIGO POR ACA
}

}



public class Reliquia {

//ATRIBUTOS Y METODOS...

public Reliquia() {

// MÁS CODIGO POR ACA
}

}



  • Creamos una interface "Comunicador"
Código: java
public interface Comunicador {

public void enviarMensaje(String mensaje);
}



  • Por ultimo, las clases TelefonoCelular, PalomaMensajera y Telegrafo, cada una hereda de una clase base diferente, pero todas implementan la interface "Comunicador". Por lo tanto heredan y deben sobrescribir el método enviarMensaje();
Código: java

public class TelefonoCelular extends Telefono implements Comunicador {

@Override
public void enviarMensaje(String mensaje) {

//Hacer lo que corresponda aqui

}

}



public class PalomaMensajera extends Paloma implements Comunicador{

@Override
public void enviarMensaje(String mensaje) {

//Hacer lo que corresponda aqui

}

}

public class Telegrafo extends Reliquia implements Comunicador {

@Override
public void enviarMensaje(String mensaje) {

//Hacer lo que corresponda aqui

}


}



  • Luego podriamos hacer algo como lo siguiente:
Código: java


Comunicador c1 = new TelefonoCelular();
Comunicador c2 = new PalomaMensajera();
Comunicador c3 = new Telegrafo();

//E invocar unicamente al metodo enviarMensaje()


Pero la verdadera importancia de todo esto la veremos a continuación:

  • Desacoplamiento de clases:

Supongamos que tenemos una clase utilitaria llamada ComunicadorManager con un metodo estatico crearComunicador:

Código: java

public class ComunicadorManager{

public static Comunicador crearComunicador{

     
      //retornamos cualquier objeto que necesitemos sin afectar en lo mas mínimo al programa ejemplo:
      //return new TelefonoCelular();
     //return new Telegrafo();

   return new PalomaMensajera();
   }
}




  Y utilizando esta clase podriamos escribir un programa como el que sigue:

Código: java


public class MiAplicacionDeMensajes {

public static void main(String[] args) {


Comunicador c = ComunicadorManager.crearComunicador();
c.enviarMensaje("Hola, esto es solo un ejemplo!!");

}

}



En este programa utilizamos la clase ComunicadorManager para obtener "un comunicador" a través del cual enviar nuestro mensaje. Lo interesate de esto es que en el método main no hardcodeamos ninguna de las clases que implementan el la interface Comunicador. Simplemente creamos un objeto comunicador utilizando el método crearComunicador y le invocamos su método enviarMensaje.

  Conclusión:


  • El metodo crearComunicador de la clase ComunicadorManager  nos permitio obtener una instancia de Comunicador sin tener que hardcodear un tipo de comunicador en particular.

  • Gracias a este método nuestro programa (el método main) quedo totalmente desacoplado de la implementación concreta del comunicador y, como vimos más arriba, cualquier objeto que se cree por mas distinto que sea no afecta ni perjudica en lo más mínimo al programa, ya que este esta totalmente separado(desacoplado) de dicha implementación.

  • Decimos entonces que utilizamos  el método crearComunicador para "fabricar objetos comunicadores". Este método constituye una factoría de objetos. A los métodos que realizan este tipo de tareas se los denomina factory.

Fuente: Java a Fondo
por: Ing Pablo Augusto SZnajdleder


#65
Off Topic / Re:Votá al troll del año!
Octubre 19, 2014, 03:22:30 PM
voto a crazyDrake
#66
Coincido con antrax es un logro de todos,  del pais, lograr semejante avance en tecnologia y desarrollo cientifico. Y bueno: "Siempre es mas facil criticar que hacer.."
#67
Java / [Java] Contador de Lineas
Octubre 16, 2014, 05:44:44 PM
Hola gente les traigo un programita que estuve haciendo es muy simple pero espero que les pueda servir a aquellos programadores que les gusta saber la cantidad de lineas que tiene sus programas :P


  • Estructura del programa:
       

  • Creamos la Ventana (nombre: Aplicacion)
Código: java
package aplicacion;

import java.awt.BorderLayout;

public class Aplicacion extends JFrame {

/*
* Creamos nuestra GUI donde veremos todos los elementos visuales
*
*/
private JMenuBar barra;
private JMenu menu;
public JMenuItem menuItem;
private JScrollPane scrollPane;
private JPanel panelCentral;
public JTextArea area;
private int lineas;
public JLabel labelContador;
private JPanel panelInferior;
private String texto;
private JMenu menuFormato;
private JMenu menuFuente;
private JMenu menuTamanio;
private JMenu menuColor;
public JMenuItem paletaDeColores;
public JMenuItem tamanio2;
public JMenuItem tamanio1;
public JMenuItem fuente1;
public JMenuItem fuente2;
public JMenuItem fuente3;


public Aplicacion() {

/*
* En el constructos inicializamos los paneles y la configuracion de la ventana
*/
iniciarPanelInferior();
iniciarPanelCentral();
iniciarMenu();
iniciarGUI();
}

private void iniciarPanelInferior() {

/*
* Creamos nuestro PanelInferior y lo añadimos a la parte SUR de la Ventana
*/
panelInferior = new JPanel();
labelContador = new JLabel(" ");
labelContador.setFont(new Font("Arial Unicode MS", Font.BOLD, 18));
panelInferior.add(labelContador);
getContentPane().add(panelInferior, BorderLayout.SOUTH);

}

private void iniciarMenu() {

/*
* Iniciamos nuestro menu que luego llevara a cabo los eventos del usuario
*/
barra = new JMenuBar();
menu = new JMenu("Opciones");
menuFormato = new JMenu("Formato");

menuItem = new JMenuItem("Abrir Archivo");

menu.add(menuItem);
menu.add(menuFormato);

menuColor = new JMenu("Color");
menuFormato.add(menuColor);

paletaDeColores = new JMenuItem("Abrir Paleta de colores");
menuColor.add(paletaDeColores);

menuTamanio = new JMenu("Tama\u00F1o");
menuFormato.add(menuTamanio);

tamanio1 = new JMenuItem("18");
menuTamanio.add(tamanio1);

tamanio2 = new JMenuItem("20");
menuTamanio.add(tamanio2);

menuFuente = new JMenu("Fuente");
menuFormato.add(menuFuente);

fuente3 = new JMenuItem("MonoSpaced");
menuFuente.add(fuente3);

fuente2 = new JMenuItem("Times New Roman");
menuFuente.add(fuente2);

fuente1 = new JMenuItem("Arial");

menuFuente.add(fuente1);
barra.add(menu);
setJMenuBar(barra); //Agregamos la barra con los menues a la ventana

}

private void iniciarPanelCentral() {
/*
* Iniciamos el panelCentral de la aplicacion donde tendremos el texto a contar
*/
area = new JTextArea();
area.setFont(new Font("Monospaced", Font.PLAIN, 15));
scrollPane = new JScrollPane(area);
scrollPane.setViewportView(area);

scrollPane
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
getContentPane().add(scrollPane, BorderLayout.CENTER);

}

private void iniciarGUI() {
/*
* Configuramos las caracteristicas de la ventana (tamaño,titulo,visibilidad,eje de vista)
*/
setSize(595, 426);
setTitle("Contador de Lineas");
setLocationRelativeTo(null);
setVisible(true);

}

}



  • Creamos el Controlador (nombre: Controlador)
Código: java


package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import modelo.Modelo;
import aplicacion.Aplicacion;

public class Controlador implements ActionListener {
/*
* Creamos Nuestro controlador que comunicara todos los eventos con el modelo
*/
private int tam = 16;
private Modelo modelo;
private Aplicacion aplicacion;

public Controlador(Aplicacion _ap, Modelo _modelo) {

//Recibimos y seteamos el modelo y la aplicacion
this.modelo = _modelo;
this.aplicacion = _ap;
agregarEventos();
}

private void agregarEventos() {

/*
* Agregamos los eventos de la ventana y le inidicamos que este objeto sera su manejador
*/
this.aplicacion.menuItem.addActionListener(this);
this.aplicacion.menuItem.setActionCommand("abrirArchivo");
this.aplicacion.paletaDeColores.addActionListener(this);
this.aplicacion.paletaDeColores.setActionCommand("paletaDeColores");
this.aplicacion.tamanio1.addActionListener(this);
this.aplicacion.tamanio1.setActionCommand("tam1");
this.aplicacion.tamanio2.addActionListener(this);
this.aplicacion.tamanio2.setActionCommand("tam2");
this.aplicacion.fuente1.addActionListener(this);
this.aplicacion.fuente1.setActionCommand("fuente1");
this.aplicacion.fuente2.addActionListener(this);
this.aplicacion.fuente2.setActionCommand("fuente2");
this.aplicacion.fuente3.addActionListener(this);
this.aplicacion.fuente3.setActionCommand("fuente3");

}

@Override
public void actionPerformed(ActionEvent evento) {

/*
* Segun el evento ejecutamos la accion pertinente
*/
switch (evento.getActionCommand()) {

case "abrirArchivo":
this.modelo.abrirArchivo();
this.aplicacion.area.setText(this.modelo.texto);
this.aplicacion.labelContador.setText("Total de lineas ="+ this.modelo.getLineas());
break;

case "paletaDeColores":

this.aplicacion.area.setForeground(this.modelo.cambiarColor());
break;

case "tam1":

this.aplicacion.area.setFont(this.modelo.nuevaFuente(
this.aplicacion.area.getFont().toString(), 18));

tam = 18;
break;

case "tam2":

this.aplicacion.area.setFont(this.modelo.nuevaFuente(
this.aplicacion.area.getFont().toString(), 20));

tam = 20;
break;

case "fuente1":
this.aplicacion.area.setFont(this.modelo.nuevaFuente("Arial",tam));

break;

case "fuente2":
this.aplicacion.area.setFont(this.modelo.nuevaFuente("Times New Roman", tam));

break;
case "fuente3":

this.aplicacion.area.setFont(this.modelo.nuevaFuente("Monospaced", tam));
break;
}

}

}




  • Creamos el modelo (nombre: Modelo)
Código: java


package modelo;

import java.awt.Color;
import java.awt.Font;
import java.io.*;

import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class Modelo {

public String texto;
private int lineas;
private Color color;
private Font nuevaFuente;
private Font fuente;

public Modelo() {

}

public Color cambiarColor(){ //Metodo que retorna un color seleccionado a partir de un componente modal ColorChooser
JColorChooser ventanaDeColores = new JColorChooser();
color = ventanaDeColores.showDialog(null,"Seleccione un Color", Color.gray);
    return color;

}

public String abrirArchivo() {
               setLineas(0);
String aux = "";
texto = "";
try {
/** llamamos el metodo que permite cargar la ventana */
JFileChooser file = new JFileChooser(); //creamos nuestro buscador de archivos

file.showOpenDialog(null);
/** abrimos el archivo seleccionado */
File abre = file.getSelectedFile(); // creamos un archivo que contendra el archivo seleccionado en el buscador

/**
* recorremos el archivo, lo leemos para plasmarlo en el area de
* texto y para  obtener el numero de lineas de codigo
*/
if (abre != null) {
FileReader archivos = new FileReader(abre);
BufferedReader lee = new BufferedReader(archivos);
while ((aux = lee.readLine()) != null) {
texto += aux + "\n";
lineas++;
setLineas(lineas);
}
lee.close();
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex + ""
+ "\nNo se ha encontrado el archivo", "ADVERTENCIA!!!",
JOptionPane.WARNING_MESSAGE);
}
return texto;// El texto se almacena en el JTextArea
}





/*
* Setter y getters
*/

public int getLineas() {
return lineas;
}

public void setLineas(int lineas) {
this.lineas = lineas;
}

/*
* Metodo para cambiar la fuente de la aplicacion
*
*/
public Font nuevaFuente(String font, int tamanio) {

nuevaFuente = new Font(font, Font.PLAIN, tamanio);
return nuevaFuente;
}
}




  • Y finalmente creamos nuestro ejecutable (nombre: Main)
Código: java

package ejecutable;

import controlador.Controlador;
import modelo.Modelo;
import aplicacion.Aplicacion;

public class Main {

public static void main(String[] args) {

Aplicacion aplicacion = new Aplicacion();
Modelo modelo = new Modelo();

/*
* Creamos y le pasamos como parametros al controlador la ventana y el modelo
*/
new Controlador(aplicacion, modelo);

}

}



Funcionando..
                                   
#68
Android / Re:DroidCam
Octubre 16, 2014, 04:04:28 AM
Buenisimo lastima que no tengo android en el cel jaja xD
#69
Java / Re:Tipos y clases genéricos en Java
Octubre 13, 2014, 11:50:50 PM
Buenísimo!! sabia el uso de tipos genéricos en C++ con las templates, pero en Java no tenia idea!.
 
Gracias por el aporte me sirvió mucho, Saludos!! :)
#70
Debates, Reviews y Opiniones / Re:¿Que OS usas?
Octubre 11, 2014, 12:22:27 AM
xp, windows 7 y con ganas de migrar a algun Linux de pocos requisitos...
#71
o.O espectaculaar!! ojala fueran a donde yo estudio a dar charlas D:  Me encanto la iniciativa vamos underc0de carajo!!
#72
Java / Re:[JAVA][MYSQL] Tutorial Basico
Octubre 05, 2014, 09:27:46 PM


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No funciona, tendré que hacer algunos ajustes pero no se mucho java.

Naab decime en que parte no te funciona o cual es el problema que tenes así te ayudo.

PD:

Gracias a todos por comentar, sus comentarios y las visitas me ayudan a crecer y me dan confianza para seguir aportando en esta comunidad tan hermosa como es underc0de!.
#73
Java / Re:[JAVA][MYSQL] Tutorial Basico
Octubre 04, 2014, 04:38:58 PM
Ok ahora lo edito gracias :)
#74
Java / [JAVA][MYSQL] Tutorial Basico
Octubre 04, 2014, 04:33:17 PM
Buenas gente llevo unos días preparando este tutorial que por mas básico que sea, me llevo un buen rato asi que espero que lo disfruten :P

Requisitos:
-IDE (Eclipse/Netbeans) No es obligatorio.
-Gestor de base de datos con MYSQL (Yo usare AppServ  2.5.10 pero se puede usar cualquier otro) Obligatorio.
-El driver MYSQL para conectarnos a la base de datos (Se puede bajar de la pagina oficial de MYSQL) Obligatorio.
-Conocimientos Básico-Intermedios de programación.


Introduccion:
Para llevar a cabo este tutorial se hará uso de la metodología MVC (Modelo-Vista-Controlador).
CitarEl cual es un patrón de arquitectura de software que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos que son el modelo, la vista y el controlador, es decir, por un lado define componentes para la representación de la información, y por otro lado para la interacción del usuario.Este patrón de arquitectura de software se basa en las ideas de reutilización de código y la separación de conceptos, características que buscan facilitar la tarea de desarrollo de aplicaciones y su posterior mantenimiento. WIKIPEDIA


Diseño:

Base de datos


  • Creacion de la base de datos.
[/list]
Código: sql
CREATE DATABASE  `dbtest` ;

  • Creacion de la tabla y volcado de la misma.
Código: sql
-- Estructura de tabla para la tabla 'producto'
--

CREATE TABLE producto (
  p_id varchar(6) NOT NULL,
  p_nombre varchar(21) NOT NULL,
  p_precio float NOT NULL default '0',
  p_cantidad int(20) NOT NULL default '0',
  PRIMARY KEY  (p_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla 'producto'
--

INSERT INTO producto VALUES ('P9-U7J', 'Producto 1', 100, 0);
INSERT INTO producto VALUES ('KO-8HY', 'Producto 2', 56.9, 0);
INSERT INTO producto VALUES ('UJ-9KK', 'Producto 3', 120.5, 0);
INSERT INTO producto VALUES ('KK-77G', 'Producto 4', 23.4, 0);
INSERT INTO producto VALUES ('KJ-886', 'Producto 5', 88, 0);
INSERT INTO producto VALUES ('PP-99P', 'Producto 6', 78.9, 0);
INSERT INTO producto VALUES ('GH-77U', 'Producto 7', 99.9, 0);


Estructura de la base de datos:
                         

Programacion:

  • Estructura del programa

  • Creación de las clases:
Empezaremos creando un nuevo proyecto en eclipse FILE -> New -> Java Project y de nombre al proyecto le pondremos TutorialUndercode. Click izquierdo en el proyecto (NEW -> Package ) y crearemos los paquetes controlador,vista y modelo.

La Vista:
Empezaremos creando el modelo GUI (Interfaz Grafica de Usuario) para nuestro proyecto que tendrá la siguiente forma:
               

VentanaVista2:
Crearemos dentro del paquete vista otra ventana que nos permitira ingresar nuevos registros a la base de datos:
Código: JAVA
package vista;

import javax.swing.JDialog;
/*
* Se desarrolla una clase de tipo JDialog que permite
*  agregar elementos a partir de una nueva ventana.
*
*/
public class VentanaVista2 extends JDialog {
public JTextField txtID;
public JTextField txtNombre;
public JTextField txtPrecio;
public JTextField txtCantidad;
public JButton aceptar;

public VentanaVista2() {

iniciarComponentes();

}

/*
* Se inicializa una GUI normal.
*/
private void iniciarComponentes() {

this.setSize(225, 209);
getContentPane().setLayout(null);

JLabel id_producto = new JLabel("id_producto");
id_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
id_producto.setBounds(10, 11, 75, 14);
getContentPane().add(id_producto);

JLabel nombre_producto = new JLabel("Nombre");
nombre_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
nombre_producto.setBounds(10, 36, 75, 14);
getContentPane().add(nombre_producto);

JLabel precio_producto = new JLabel("Precio");
precio_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
precio_producto.setBounds(10, 61, 75, 14);
getContentPane().add(precio_producto);

JLabel cantidad_producto = new JLabel("Cantidad");
cantidad_producto.setFont(new Font("Tahoma", Font.PLAIN, 13));
cantidad_producto.setBounds(10, 86, 75, 14);
getContentPane().add(cantidad_producto);

txtID = new JTextField();
txtID.setBounds(95, 9, 86, 20);
getContentPane().add(txtID);
txtID.setColumns(10);

txtNombre = new JTextField();
txtNombre.setColumns(10);
txtNombre.setBounds(95, 34, 86, 20);
getContentPane().add(txtNombre);

txtPrecio = new JTextField();
txtPrecio.setColumns(10);
txtPrecio.setBounds(95, 59, 86, 20);
getContentPane().add(txtPrecio);

txtCantidad = new JTextField();
txtCantidad.setColumns(10);
txtCantidad.setBounds(95, 84, 86, 20);
getContentPane().add(txtCantidad);

aceptar = new JButton("Aceptar");
aceptar.setBounds(50, 127, 119, 33);
getContentPane().add(aceptar);

}
}


  • El Controlador:
Creamos dentro del paquete controlador una clase llamada Controlador que hara de interfaz entre la conexion y consulta a la base de datos y la GUI.
Código: java
package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

import vista.VentanaVista2;
import vista.VentanaVista;
import modelo.Modelo;

public class Controlador implements ActionListener, MouseListener {
/*
* Controlador:
* Comunica a la interfaz grafica con la logica
*/
private VentanaVista2 vista2;
private Modelo modelo;
private VentanaVista vista;

public Controlador(Modelo _modelo, VentanaVista _vista,
VentanaVista2 _vista2) {
this.vista2 = _vista2;
this.modelo = _modelo;
this.vista = _vista;
this.vista.setVisible(true);
agregarEventos();

}

private void agregarEventos() {

this.vista.btnAgregarProductos.addActionListener(this);// añadimos el// evento
this.vista.btnAgregarProductos.setActionCommand("agregarProductos");// reconocimiento del boton
this.vista.btnEliminarProductos.addActionListener(this);

this.vista.btnEliminarProductos.setActionCommand("eliminarProductos");// reconocimiento del boton
this.vista.btnVerProductos.addActionListener(this);// añadimos el evento
this.vista.btnVerProductos.setActionCommand("verProductos");// reconocimiento del boton
this.vista.itemCreditos.setActionCommand("creditos");
this.vista.itemCreditos.addActionListener(this);
this.vista.btnEditarProductos.addActionListener(this);
this.vista.btnEditarProductos.setActionCommand("editarProductos");

// añade e inicia el jtable con un DefaultTableModel vacio
this.vista.__tabla_producto.addMouseListener(this); // añadimos el
// evento
this.vista.__tabla_producto.setModel(new DefaultTableModel());
this.vista.setLocationRelativeTo(null); // Centramos la aplicacion

}


@Override
public void actionPerformed(ActionEvent evento) { //Se lleva a cabo el manejo de eventos
                                                     
switch (evento.getActionCommand()) {         

case "verProductos":

this.vista.__tabla_producto
.setModel(this.modelo.getTablaProducto());
this.vista.btnVerProductos.setEnabled(false);
break;

case "agregarProductos":

this.vista2 = new VentanaVista2();
this.vista2.setModal(true);
this.vista2.setLocationRelativeTo(vista);
this.vista2.aceptar.addActionListener(this);
this.vista2.aceptar.setActionCommand("nuevoRegistro");
this.vista2.setVisible(true);
break;

case "eliminarProductos":

if (this.modelo.EliminarProducto(
this.vista.__id_producto.getText(),
this.vista.__nombre.getText())) {

this.vista.__tabla_producto.setModel(this.modelo
.getTablaProducto());
this.vista.__id_producto.setText("");
this.vista.__nombre.setText("");
this.vista.__precio.setText("0");
this.vista.__cantidad.setText("0");
}

break;
case "creditos":
JOptionPane.showMessageDialog(this.vista,
"Modificiado y adaptado de http://www.jc-mouse.net/",
"Creditos", JOptionPane.INFORMATION_MESSAGE);

break;
case "editarProductos":

String id = this.vista.__id_producto.getText();
String nombre = this.vista.__nombre.getText();
String precio = this.vista.__precio.getText();
String cantidad = this.vista.__cantidad.getText();
if (this.modelo.editarProducto(id, nombre, precio, cantidad)) {

this.vista.__tabla_producto.setModel(this.modelo
.getTablaProducto());
this.vista.__id_producto.setText("");
this.vista.__nombre.setText("");
this.vista.__precio.setText("0");
this.vista.__cantidad.setText("0");
JOptionPane.showMessageDialog(vista,
"Registro agregado correctamente!!");
} else {
JOptionPane.showMessageDialog(vista,
"Error no pueden existir campos vacios");
}

break;

case "nuevoRegistro":

if (this.modelo.NuevoProducto(this.vista2.txtID.getText(),
this.vista2.txtNombre.getText(),
this.vista2.txtPrecio.getText(),
this.vista2.txtCantidad.getText())) {
this.vista2.dispose();
this.vista.__tabla_producto.setModel(this.modelo
.getTablaProducto());
JOptionPane.showMessageDialog(vista,
"Exito: Nuevo registro agregado.");
this.vista.__id_producto.setText("");
this.vista.__nombre.setText("");
this.vista.__precio.setText("0");
this.vista.__cantidad.setText("0");
} else
// ocurrio un error
JOptionPane.showMessageDialog(vista,
"Error: Los datos son incorrectos.");
break;

}

}

          /*Se implementa el metodo abstracto que atiende el click del mouse
           */
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 1)// Si se presiona click sobre algun elemento del
// JTable lo mostramos en los textFields
{
int fila = this.vista.__tabla_producto.rowAtPoint(e.getPoint());
if (fila > -1) {
this.vista.__id_producto.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 0)));
this.vista.__nombre.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 1)));
this.vista.__precio.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 2)));
this.vista.__cantidad.setText(String
.valueOf(this.vista.__tabla_producto
.getValueAt(fila, 3)));
}

this.vista.__id_producto.setEditable(false);
}
}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

}

  • El Modelo:
Dentro del modelo crearemos dos clases Conexion y Modelo, la primera nos conectara a la base de datos y la segunda obtendrá la información necesaria de la misma.

  • Conexion
Código: java
package modelo;

import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
* LLeva a cabo la conexion con la base de datos.
*/
public class Conexion {

/*
* Se declaran los atributos de la conexion.
*/
private static String usuario = "root";
private static String password = "root";
private static String baseDeDatos = "";
private static String driver = "com.mysql.jdbc.Driver";
private static String servidor = "jdbc:mysql://localhost/" + baseDeDatos;
private static Connection conexion = null;

/*
* Constructor sobrecargado permite configurar el acceso a cualquier DB especificando
* la tabla el usuario y la contraseña.
*/
public Conexion(String usuario, String password, String baseDeDatos) {
setUsuario(usuario);
setPassword(password);
setBaseDeDatos(baseDeDatos);
Conexion.servidor = "jdbc:mysql://localhost/" + getBaseDeDatos();

}

public Conexion() {

Conexion.servidor = "jdbc:mysql://localhost/" + getBaseDeDatos();

}

/*
* Metodo que se conecta y establece la conexion al servidor
*/
void establecerConexion() {

try {
Class.forName(driver); // Cargo el driver de MYSQL
          conexion = DriverManager.getConnection(servidor, usuario, password); // Establezco la conexion
} catch (ClassNotFoundException | SQLException excepcion) {
System.out.println("Error en la conexion trate incorporando\n El driver a su proyecto ");
}

}
/*
* Metodos GETTERS y SETTERS
*/

public static String getUsuario() {
return usuario;
}

public static void setUsuario(String usuario) {
Conexion.usuario = usuario;
}

public static String getPassword() {
return password;
}

public static void setPassword(String password) {
Conexion.password = password;
}

public static String getDriver() {
return driver;
}

public static void setDriver(String driver) {
Conexion.driver = driver;
}

public static String getServidor() {
return servidor;
}

public static void setServidor(String servidor) {
Conexion.servidor = servidor;
}

public Connection getConexion() {
return conexion;
}

public void setConexion(Connection conexion) {
Conexion.conexion = conexion;
}

public static String getBaseDeDatos() {
return baseDeDatos;
}

public static void setBaseDeDatos(String baseDeDatos) {
Conexion.baseDeDatos = baseDeDatos;
}

}

  • Modelo
Código: java
package modelo;

import javax.swing.table.DefaultTableModel;
import javax.swing.*;

import java.sql.*;
/*
* LLeva a cabo la logica del programa y le entrega los datos procesados
* a los niveles adyacentes
*
*/

public class Modelo {
private Conexion conexionMYSQL;
private boolean res = false;
private boolean bandera = false;

public Modelo() {
conexionMYSQL = new Conexion("root", "root", "dbtest");
//Se establece la base de datos y las claves de acceso para la conexion aL GESTOR MYSQL.
}

//Metodo que retorna un DefaultTableModel permitiendo llenar la tabla del GUI.
public DefaultTableModel getTablaProducto() {
DefaultTableModel tablemodel = new DefaultTableModel();
int registros = 0;
String[] columNames = { "ID", "Nomnbre", "Precio", "Cantidad" }; //Se establecen las columnas de la tabla
// obtenemos la cantidad de registros existentes en la tabla y se
// almacena en la variable "registros"
// para formar la matriz de datos
try {

conexionMYSQL.establecerConexion(); //Nos conectamos a la base de datos

PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement("SELECT count(*) as total FROM producto");
ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("total"); //Obtenemos el total de los registros para crear la matriz de objetos
res.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
// se crea una matriz con tantas filas y columnas que necesite
Object[][] data = new String[registros][4];
try {
// realizamos la consulta sql y llenamos los datos en la matriz
// "Object[][] data"
PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement("SELECT * FROM producto");
ResultSet res = pstm.executeQuery();
int i = 0;
while (res.next()) {
data[i][0] = res.getString("p_id");
data[i][1] = res.getString("p_nombre");
data[i][2] = res.getString("p_precio");
data[i][3] = res.getString("p_cantidad");
i++;
}
res.close();
// se añade la matriz de datos en el DefaultTableModel
tablemodel.setDataVector(data, columNames);
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return tablemodel; //Retornamos la matriz de datos para que sea cargada en el evento "VER PRODUCTOS"
}

//Metodo para editar/actualizar un registro
public boolean editarProducto(String id, String nombre, String _precio,String _cantidad) {
//Se valida el producto
if (nombre.trim().length() > 0 && id.trim().length() > 0) {
try {
Double precio = Double.parseDouble(_precio.replace(",", "."));

int cantidad = Integer.parseInt(_cantidad);
String actualizar = "UPDATE  `producto` SET  `p_nombre` = ?,`p_precio` =  ?,`p_cantidad` =  ?  WHERE  `p_id` = ?";
PreparedStatement consulta = conexionMYSQL.getConexion()
.prepareStatement(actualizar);
consulta.setString(1, nombre);
consulta.setDouble(2, precio);
consulta.setInt(3, cantidad);
consulta.setString(4, id);

if (consulta.executeUpdate() == 1) {
//Si la consulta se ejecuto correctamente devolvemos verdadero

bandera = true;
} else { //Sino devolvemos falso
bandera = false;
}
} catch (SQLException e) {

System.out.println(e);
}
}
return bandera;

}

//Metodo para eliminar un producto
public boolean EliminarProducto(String id, String nombre) {
if (nombre.trim().length() > 0) { //Si se selecciono un registro se lo elimina

// se arma la consulta
String consultaSQL = " DELETE FROM producto WHERE  p_id='" + id
+ "' ";
// se ejecuta la consulta
try {
PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement(consultaSQL);
pstm.execute();
pstm.close();
res = true;
JOptionPane.showMessageDialog(null,
"Registro eliminado correctamente!!");
} catch (SQLException e) {
System.err.println(e.getMessage());
}
} else {  //Si no se selecciono un registro devuelve un error
res = false;
JOptionPane.showMessageDialog(null,
"Debe seleccionar un registro!!", "Error",
JOptionPane.ERROR_MESSAGE);
}
return res;
}

//Metodo que añade un producto a la base de datos
public boolean NuevoProducto(String id, String nombre, String precio,
String cantidad) {
if (valida_datos(id, nombre, precio, cantidad)) {
// se reemplaza "," por "."
precio = precio.replace(",", ".");
// Se arma la consulta
String consulta = " INSERT INTO producto ( p_id , p_nombre , p_precio, p_cantidad  ) "
+ "VALUES ( '"
+ id
+ "','"
+ nombre
+ "', '"
+ precio
+ "'," + cantidad + " ) ";
// se ejecuta la consulta
try {
PreparedStatement pstm = conexionMYSQL.getConexion()
.prepareStatement(consulta);
pstm.execute();
pstm.close();
return true; // Solo si la consulta se ejecuto devuelve TRUE en
// los demas casos FALSE
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return false;
} else
return false;
}

//Valida que el ID,NOMBRE Y PRECION SEAN VALIDOS
private boolean valida_datos(String id, String nombre, String precio,
String cantidad) {
if (id.equals("  -   ")) //Si el id es igual a - devuelve falso
return false;
else if (nombre.length() > 0 && precio.length() > 0
&& cantidad.length() > 0) { //Si cumple la condicion  devuelve verdadero
return true;
} else   //Si ninguno de los dos cumple devuelve falso
return false;
}

}


  • Clase Ejecutable:
Sera aquella que inicie la aplicacion e instancie al controlador con los objetos correspondientes.
  • Main
Código: java
package ejecutable;

import controlador.Controlador;
import modelo.Modelo;
import vista.VentanaVista;
import vista.VentanaVista2;

/*
* Main es la clase principal que se encarga de ejecutar y correr el programa
*/
public class Main {

public static void main(String[] args) {
VentanaVista2 vista2 = new VentanaVista2();
VentanaVista vista = new VentanaVista();
Modelo modelo = new Modelo();
new Controlador(modelo, vista, vista2);
  //Se pasa como parametro al controlador la vista y el modelo para que este los atienda.                                     

}

}


Por ultimo solo tenemos que añadir el driver a nuestra aplicación y corrobar que todo ande bien.
En eclipse: Click derecho en el proyecto Build Patch -> Configure Build Patch -> Libraries -> Add External Jars
                 

                                           Proyecto andando:
                                         


Se pueden descargar la aplicacion desde aca -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#75
Voto que "Si" para el usuario común es una herramienta imprescindible, ya que son los que más indefensos se encuentran en la red. Saludos!
#76
C / C++ / Código Fuente de mi juego preferido!
Septiembre 19, 2014, 12:38:49 PM
Hola gente les dejo el codigo fuente de mi juego preferido por si a alguien le interesa darle una mirada :P


Star Wars Jedi Knight Jedi academy 3


Link -- > No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


PD: Esta programado en C y C++


CitarActivision and Raven are releasing this code for people to learn from and play with. This code is copyright Activision 2003.  This source is released under GNU GPLv2.
#77
Hola gente alguien que me tire una mano por favor.
-Tengo una web vulnerable a XSS (mando un pm a un usuario(victima) y puedo redireccionarlo a mi host atacante)
-Duda.. No puedo robar cookies ya que la web no utiliza este tipo de metodos..
- Estoy probando metodos para backdorear y hacer zombies con XSS Shell


- ¿Alguna idea de que otros tipos de ataques puedo extender a partir de esta peculiar vulnerabilidad?

Desde ya Saludos.
#78
Java / [Libro JAVA] POO
Mayo 24, 2014, 10:13:40 PM
Aporte para la comunidad que tanto conocimiento me ha brindado.






Archivo desde dropbox --->[No tienes permitido ver los links. Registrarse o Entrar a mi cuenta/underc0de.org/foro/java/manual-java2/[/url]
Peso : 20.4 mb

#79


Reportado:No
Vector:No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Web:No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Autor: LKI
#80
Dudas y pedidos generales / Re:Winapi
Mayo 10, 2014, 08:09:55 PM
Gracias!