elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Java / [Solución] Enlazar 3 Clases (Referencias) en: 24 Mayo 2014, 06:31 am
No sé cual sea un nombre apropiado para esta consulta ya que no se que sea la causa, pero la idea es esa, enlazar 3 clases. Después de darle varias vueltas al asunto, no pude figurar que es lo que estoy haciendo mal.

La clase principal (InterfacePrincipal , que es la GUI), crea en tiempo de ejecución y en función a una determinada cantidad, componentes para mostrar la información relacionada a un articulo de venta.

Por lo que dependiendo esta cantidad se crearan tantos objetos sean necesarios de otra clase que describo a continuación:


Clase InformacionArticulo

Código:

// Package e Imports

public class InformacionArticulo extends JPanel{
    
        Carrito carrito = new Carrito();
    
        private JButton jButtonComprar;
        
        String nombre;
        String precio;
 
    public InformacionArticulo(
                
                String nombre ,
                String precio
        
        ){
            
                this.nombre = nombre;
                this.precio = precio;
                
                formato(); // Utilizado para medidas y dar formato a los componentes
    }

    private void formato(){
            
            jButtonComprar.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent evt){
                    carrito.agregar(nombre , precio);
                }
            });
          
            add(jButtonComprar);
    }
}



Full Code: http://pastebin.com/qXrQ0Rf9]http://pastebin.com/qXrQ0Rf9]http://pastebin.com/qXrQ0Rf9


De lo anterior elimine código irrelevante para no hacer tan largo el tema y confundirlos con otros componentes que no vienen al caso. Entonces de la anterior clase lo más importante es el botón jButtonComprar y su Action Performed, el cual al ser presionado se deberá estar cargando información en una tabla de la clase principal (InferfacePrincipal) a traves del médoto agregar() de la clase Carrito


Clase Carrito
Código:

public class Carrito {
    
    InterfacePrincipal gui = new InterfacePrincipal; // *Nota Importante, esta es la clase principal
    
    public Carrito(){}
    
    public void agregar(String nombre , String precio){
        
        String vector[] = {"#", nombre , precio};
        DefaultTableModel modelo = (DefaultTableModel)gui.getModeloTablaCarrito();
        modelo.addRow(vector);

        System.out.println("Termina método agregar");
    }
}



De donde getModeloTablaCarrito() devuelve el modelo de la tabla donde se muestran los articulos agregados al carrito. Posteriormente se agrega una fila con vector como Data al modelo de la tabla que se encuentra en GUI.

Pero el problema está en que no se ve reflejado en la tabla, y he comprobado que el ActionPerformed del jButtonComprar funcionan, las variables nombre y precio son las correctas y pasan correctamente a agregar() de Carrito, e inclusive se imprime "Termina método agregar". Por lo que sé que paso por todo lo anterior dentro de ese método.

*Nota Importante Aquí lo que hice antes fue solo hacer la referencia, es decir, InterfacePrincipal gui; pero obtenia un NullPointerException, que supongo era lógico, por lo que tuve que crear el Objeto, pero de lo que no estoy seguro es si al crear un Objeto InterffacePrincipal, se crea otro totalmente diferente al original de la Clase Principal (GUI)  puesto que dentro del constructor de InferfacePrincipal se inicializan todos los componentes,

Estoy trabjando en NetBeans, y he probado el código para agregar filas con vector como Data dentro de la misma clase principal donde se encuentra la Tabla y funciona correctamente. El problema es que no sé que es lo que está pasando, de la forma que lo estoy haciendo no se refleja en la tabla.

En si, InferfacePrincipal llama a InformacionArticulos el cual llama a Carrito el cual llama a InterfacePrincipal para obtener su Tabla y agregar filas con cierta información..


Notas:
De esta manero creo los Objetos de InformacionArticulo

Código:
private void mostrarProductos(
            JPanel contenedor , JComboBox producto
    ){
        String tipo = producto.getSelectedItem().toString();
        String nombre;
        String existencia;
        String precio;
        String imagen;
        File archivo = new File(generarRutaArchivo(tipo));
        
        int c_Height = 0;
        int c_Articulos = 0;
        
        int cantidadArticulos = getCantidadArticulos(archivo);
        for(int i=0 ; i<cantidadArticulos ; i++){
            
            nombre = getInformacionArchivo(archivo , i , 0);
            existencia = getInformacionArchivo(archivo , i , 1);
            precio = getInformacionArchivo(archivo , i , 2);
            imagen = generarRutaImagen(tipo , nombre);
            
            contenedor.add(new InformacionArticulo(
                    tipo , nombre , existencia , precio , imagen));
            
            c_Height += 300;
            c_Articulos++;
        }
        
        contenedor.setPreferredSize(new Dimension(400 , c_Height));
        contenedor.setLayout(new GridLayout(c_Articulos , 1));
    }


De donde getInformaciónArticulo(File , int , int) va a leer un archivo donde está alojada la información de todos los articulos pertenecientes a una categoria, ejemplo Teclado.

La forma de uso sería:
getInformacionArticulo(ArchivoALeer , NumeroDeLinea , IndiceDeInformacion)

Donde en IndiceDeInformacion.
• 0 = Nombre del articulo
• 1 = Existencias
• 2 = Precio del articulo
• 3 = Descripcion

Entonces por ejemplo si del JComboBox selecciono teclado, llamará al método anteriormente expuesto.



Código:
private void jComboBoxProductosActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        cambiarPanel("Informacion"); // Cambia a un panel donde se mostrará la información de todos los articulso de la categoria seelccionada.
        
        JPanel panel = new JPanel();
        mostrarProductos(panel , jComboBoxProductos);
        
        jScrollPane3.setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_AS_NEEDED);
        jScrollPane3.setViewportView(panel);
        
        
}

Y una vez se tenga algo como la siguiente imagen al dar click en el botón "Agregar al Carrito", recordando a la clase InformaciónArticulo, especificamente el ActionPerformed del Boton:

Código:
ButtonComprar.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                    carrito.agregar(nombre , precio);
                }
            });


Se pasan como argumentos nombre y precio a agregar() de Carrito.

Código:
public void agregar(String nombre , String precio){
              
        String vector[] = {"#", nombre , precio};
        DefaultTableModel modelo;
        modelo = (DefaultTableModel)InterfacePrincipal.getInstance().getTabla().getModel();
        
        modelo.addRow(vector);
        
        System.out.println("Termina método agregar");
    }

De lo cual llega a imprimir por consola "Termina método agregar", dando a entender que paso por todo lo anterior a esa intrucción dentro del método. Dicho método debería de reflejar la información en la siguiente tabla, pero ahí está el problema, no lo hace.







¿Qué es lo que está pasando?
¿Qué estoy haciendo mal?
¿Qué otra solución puedo ofrecer para agregar un articulo al carrito?

2  Programación / Scripting / [BATCH] Ayuda con algoritmo, Accion sobre archivo de texto en: 19 Abril 2012, 06:31 am
Hola que tal, estoy aqui de nuevo molestando. Recientemente empeze un proyecto personal, el cual es realizar un adminsitrador de mis sitios. Esta bastante avanzando debo decir, solo que aun hay pequeños detalles que aun no estan definidos.

Hipoteticamente tengo un archivo de texto el cual se guardara el nombre del sitio
ejemplo:

Citar

Lo que necesito es que me devuelva el contenido enumerado en una lista dentro del mismo bat, es decir.

Citar

Pero que al hacer esto pueda trabajar con los numeros, o al menos con la linea que contiene el respectivo nombre.

Lo siguiente seria ser capaz de redirigirme a ese sitio, agregar y eliminar algun sitio deseado.

Al tratar de visualizar los sitios utilizo este codigo

Código
  1. IF NOT EXIST "%USERPROFILE%\PADM\Sites.txt" (echo No existe registro de sitios & pause & GOTO :ADDSITE) else (GOTO :SHOWP)
  2.  
  3. :SHOWP
  4. CLS
  5.  
  6. FOR /F "tokens=*" %%S IN (%USERPROFILE%\PADM\Sites.txt) DO (echo %%S)
  7. CHOICE /M "Desea ser redirigido a un sitio: "
  8. IF %errorlevel% EQU 1 (GOTO :REDIR) else (GOTO :ADM)
  9.  
  10. :REDIR
  11. SET /P "NS= Numero de sitio: "
  12. FOR /F "tokens=* skip=%ns%" %%R IN (%USERPROFILE%\PADM\Sites.txt) DO (START)
  13.  
  14.  

Como se daran cuenta no se si es posible hacer lo que intento, que atravez del numero de linea salte la linea en el txt hasta el sitio que deseo y de ahi inicie el sitio web.

Al agregar un sitio este es el codigo que tengo.
Código
  1. :ADDSITES
  2. CLS
  3.  
  4. echo (Agregar Sitio)
  5. echo Ejemplo:
  6. echo Nombre del sitio: www.elhacker.net (WWW. es implicito)
  7.  
  8. SET /P "site= Nombre del sitio: www."
  9.  
  10. echo www.%site% >> "%USERPROFILE%\PADM\Sites.txt"
  11.  
  12. CHOICE /M "Desea agregar otro sitio: "
  13. IF %errorlevel% EQU 1 (GOTO :ADDSITES) else (GOTO :MENU)
  14.  

Al eliminar no tengo mucha creatividad, y la ultima vez termino borrandome todo lo que contenia el directorio incluido el fichero bat.

Código
  1. :DELSITE
  2.  
  3. FOR /F "tokens=*" %%S IN (%USERPROFILE%\PADM\Sites.txt) DO (echo %%S)
  4.  
  5. SET /P "ND= Numero de sitio a eliminar: "
  6. FOR /F "tokens=* skip=%ND%" %%R IN (%USERPROFILE%\PADM\Sites.txt) DO (DEL
  7.  
  8.  

igual me he quedado atorado, despues del DO,

He tratado diferentes metodos, buscado temas similares y experimentando, como siempre, este es mi ultimo recurso, asi que por favor espero su ayuda. Tambien si tienen alguna otra idea mejor o algun uso de menos codigo seria de ayuda, cualquier critica es bienvenida.

PD: No puse todo el codigo, solo son las partes en detalles que teme faltan.
3  Programación / Scripting / [Batch] Ayuda con LOGIN en: 11 Abril 2012, 01:19 am
Hola, aqui estoy otra vez molestando, la ultima vez deje ya un tema, que por pena no quise decir que no era lo que buscaba, aunque sinceramente creo que exprese claramente lo que deseaba. En fin, aun continuo tratando de hacer mi LOG IN xd. El ultimo tema me animo mucho para al fin conseguir entender (no a la perfeccion) el uso del Comando FOR, que desde ya hace tiempo me tenia algo fastidiado. Pero finalmente he comprendido la sintaxis y el uso de sus parametros u opciones a nivel basico. Continuando con el tema esto es lo que tengo.


Código
  1. @echo off
  2. TITLE LOGIN Script
  3. COLOR 0A
  4.  
  5. echo :: WELCOME to LOGIN Script::
  6. echo.
  7.  
  8. :MENU
  9. echo ------------
  10. echo 1) Registro
  11. echo 2) Log IN
  12. echo 3) Salir
  13. echo ------------
  14. echo.
  15.  
  16. SET /P "op=Opcion: "
  17. IF %op% EQU 1 (GOTO :REGIST)
  18. IF %op% EQU 2 (GOTO :LOGIN)
  19. IF %op% EQU 3 (exit) else (GOTO :ERROR & GOTO :MENU)
  20.  
  21. :REGIST
  22.  
  23. CLS
  24.  
  25. echo Establece los siguientes parametros:
  26. echo.
  27.  
  28. SET /P "name=Usuario: "
  29. SET /P "passw=Contrasena: "
  30. echo.
  31.  
  32. echo %name% > C:\users\%USERNAME%\LOGINScriptUsername.txt
  33. ATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
  34. echo %passw% > C:\users\%USERNAME%\LOGINScriptPassword.txt
  35. ATTRIB +H C:\users\%USERNAME%\LOGINScriptPassword.txt
  36.  
  37. CHOICE /M "Desea guardar esta configuracion?:"
  38. IF %errorlevel% EQU 1 (GOTO :LOGIN)
  39. IF %errorlevel% EQU 2 (GOTO :REGIST) else (GOTO :ERROR & GOTO :REGIST)
  40.  
  41. :LOGIN
  42.  
  43. CLS
  44.  
  45. echo :: LOG IN ::
  46. echo.
  47.  
  48. SET "userlogin= FOR /F "tokens=1" %%U IN ('TYPE "C:\users\%USERNAME%
  49.  
  50. \LOGINScriptUsername.txt" 2^>nul') DO (SET "%userlogin%=%user%")"
  51.  
  52. SET "password= FOR /F "tokens=1" %%U IN ('TYPE "C:\users\%USERNAME%
  53.  
  54. \LOGINScriptPassword.txt" 2^>nul') DO (SET "%password%=%pass%")"
  55.  
  56. SET /P "user= Usuario: "
  57. SET /P "pass= Contrasena: "
  58.  
  59. IF %user% EQU %userlogin% (IF %pass% EQU %password% ((GOTO :WELCOME) else (GOTO
  60.  
  61. :LOGINERROR))
  62.  
  63. :WELCOME
  64.  
  65. CLS
  66.  
  67. FOR /F "tokens=1" %%A IN (C:\users\%USERNAME%\LOGINScriptUsername.txt) DO (echo
  68.  
  69. Bienvenido %%A)
  70. echo.
  71.  
  72. SET /P "wish= Que desea hacer?: "
  73.  
  74. :ERROR
  75. CLS
  76. echo ERROR: Se ha producido un error, por favor verifica los datos ingresados
  77.  
  78. :LOGINERROR
  79. echo El usuario/contrasena no son validos, por favor verifica y vuelve a ingresar
  80.  
  81. los datos.
  82. echo.
  83. GOTO :LOGIN
  84.  
  85. pause>NUL
  86.  



Y esto es lo que yo quiero:

Citar
Es simple, un LOG IN que pida usuario y contraseña, si estos son validos continuar sino te jodes.

Como lo pienso o tengo la idea de que se hace:

Citar
Una vez registrandose, se crearan dos ficheros .TXT independientes, ambos con 1 sola linea de texto teniendo ya sea el nombre de usuario o la contraseña.

En el LOG IN, establecer una variable que sea igual a la cadena de texto del usuario y otra que sea igual a la contraseña. Un vez pidiendo los datos Usuario y Contraseña respectivamente, con el uso de un IF verficar si ambas variables son iguales, si lo son continuar sino, bueno ya saben (exit).


Cabe mencionar que use echo %errorlevel% para saber si no habia ni un error en los comandos, y tal parece no hubo ni un error en ningun momento, Introduzco el nombre que estableci asi como la contraseña y me envia a la etiqueta :WELCOME cosa que es buena, pero igual aunque no introduzca los datos validos me envia a la etiqueta :WELCOME

PD: No sé realmente si me doy a entender, pero si no lo hago,  por favor decirmelo. y os agradezco la ayuda y atención prestada.


4  Programación / Scripting / [BATCH] Detectar primera ejecucion y guardar datos en: 4 Abril 2012, 22:01 pm
Hola que tal a todos, ésta es mi primera vez aqui en este foro, el asunto es el siguiente, despues de leer manuales y todo eso, aun no encuentro la manera de hacer lo siguiente:

Lo que trato de hacer es algo parecido a un Login, donde te pida solo el nombre de usuario para poder ingresar, pero al ser la primera vez de ejecutarlo me muestre un mensaje

Citar
"Esta es la primera vez que utilizas X script. Tienes que establecer un nombre de usuario"

Despues de mostrar el mensaje ir a un SET /P para que el usuario pueda establecer un nombre, pero que ese dato ingresado (el nombre) se quede guardado para la proxima sesion.

esto es lo que tengo.

Código
  1. @echo off
  2. TITLE PassADM
  3. COLOR 0A
  4.  
  5. echo :: Bienvenido a PassADM ::
  6. echo.
  7.  
  8. SET /P nameuser= Usuario:
  9. echo %nameuser% > C:\Users\PassAdmi.txt
  10. CD C:\Users\PassAdmi.txt
  11.  

Como veran no es mucho. Mi idea es la siguiente:
Despues de establecer el nombre de usuario, éste se guarde en un .txt para luego llamar a ese .txt y con IF EXIST verificar si existe y continuar, si no existe que marque error.  No se si voy bien, si hay otra solución agradeceria me ayudaran. Saludos a todos los escritores.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines