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ú

Temas - EAMP14

#1
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



// 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


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

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.




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:


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



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


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
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
www.elhacker.net
www.youtube.com
www.taringa.com
www.etc.com

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

Citar
1. www.elhacker.net
2. www.youtube.com
3. www.taringa.com
4. www.etc.com

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 (dos) [Seleccionar]

IF NOT EXIST "%USERPROFILE%\PADM\Sites.txt" (echo No existe registro de sitios & pause & GOTO :ADDSITE) else (GOTO :SHOWP)

:SHOWP
CLS

FOR /F "tokens=*" %%S IN (%USERPROFILE%\PADM\Sites.txt) DO (echo %%S)
echo.
echo.
CHOICE /M "Desea ser redirigido a un sitio: "
IF %errorlevel% EQU 1 (GOTO :REDIR) else (GOTO :ADM)

:REDIR
SET /P "NS= Numero de sitio: "
FOR /F "tokens=* skip=%ns%" %%R IN (%USERPROFILE%\PADM\Sites.txt) DO (START)



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 (dos) [Seleccionar]

:ADDSITES
CLS

echo (Agregar Sitio)
echo.
echo Ejemplo:
echo Nombre del sitio: www.elhacker.net (WWW. es implicito)
echo.
echo.

SET /P "site= Nombre del sitio: www."

echo www.%site% >> "%USERPROFILE%\PADM\Sites.txt"
echo.
echo.

CHOICE /M "Desea agregar otro sitio: "
IF %errorlevel% EQU 1 (GOTO :ADDSITES) else (GOTO :MENU)


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

Código (dos) [Seleccionar]

:DELSITE

FOR /F "tokens=*" %%S IN (%USERPROFILE%\PADM\Sites.txt) DO (echo %%S)

SET /P "ND= Numero de sitio a eliminar: "
FOR /F "tokens=* skip=%ND%" %%R IN (%USERPROFILE%\PADM\Sites.txt) DO (DEL



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
Scripting / [Batch] Ayuda con LOGIN
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 (bash) [Seleccionar]
@echo off
TITLE LOGIN Script
COLOR 0A

echo :: WELCOME to LOGIN Script::
echo.

:MENU
echo ------------
echo 1) Registro
echo 2) Log IN
echo 3) Salir
echo ------------
echo.

SET /P "op=Opcion: "
IF %op% EQU 1 (GOTO :REGIST)
IF %op% EQU 2 (GOTO :LOGIN)
IF %op% EQU 3 (exit) else (GOTO :ERROR & GOTO :MENU)

:REGIST

CLS

echo Establece los siguientes parametros:
echo.

SET /P "name=Usuario: "
SET /P "passw=Contrasena: "
echo.

echo %name% > C:\users\%USERNAME%\LOGINScriptUsername.txt
ATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
echo %passw% > C:\users\%USERNAME%\LOGINScriptPassword.txt
ATTRIB +H C:\users\%USERNAME%\LOGINScriptPassword.txt

CHOICE /M "Desea guardar esta configuracion?:"
IF %errorlevel% EQU 1 (GOTO :LOGIN)
IF %errorlevel% EQU 2 (GOTO :REGIST) else (GOTO :ERROR & GOTO :REGIST)

:LOGIN

CLS

echo :: LOG IN ::
echo.

SET "userlogin= FOR /F "tokens=1" %%U IN ('TYPE "C:\users\%USERNAME%

\LOGINScriptUsername.txt" 2^>nul') DO (SET "%userlogin%=%user%")"

SET "password= FOR /F "tokens=1" %%U IN ('TYPE "C:\users\%USERNAME%

\LOGINScriptPassword.txt" 2^>nul') DO (SET "%password%=%pass%")"

SET /P "user= Usuario: "
SET /P "pass= Contrasena: "

IF %user% EQU %userlogin% (IF %pass% EQU %password% ((GOTO :WELCOME) else (GOTO

:LOGINERROR))

:WELCOME

CLS

FOR /F "tokens=1" %%A IN (C:\users\%USERNAME%\LOGINScriptUsername.txt) DO (echo

Bienvenido %%A)
echo.

SET /P "wish= Que desea hacer?: "

:ERROR
CLS
echo ERROR: Se ha producido un error, por favor verifica los datos ingresados

:LOGINERROR
echo El usuario/contrasena no son validos, por favor verifica y vuelve a ingresar

los datos.
echo.
GOTO :LOGIN

pause>NUL




Y esto es lo que yo quiero:

CitarEs 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:

CitarUna 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
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 (bash) [Seleccionar]

@echo off
TITLE PassADM
COLOR 0A

echo :: Bienvenido a PassADM ::
echo.

SET /P nameuser= Usuario:
echo %nameuser% > C:\Users\PassAdmi.txt
CD C:\Users\PassAdmi.txt


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.