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

#1
Java / Re: Problema con cola
25 Mayo 2014, 09:09 AM
Bastaria con crear un Objeto de PanelDibujo y agregarlo a Principal en su constructor.

add(new PanelDibujo);

aunque no sé si extends JApplet funcione igual que un JFrame, no he trabajado con ello, pero igual,
mejor dejo en manos de mi otro compañero  que tiene mas conocimientos con esto. Es muy bueno! Saludos.
#2
Java / Re: Enlazar 3 Clases
25 Mayo 2014, 08:34 AM
Cita de: Migugami en 25 Mayo 2014, 08:11 AM
Ya te entendí, la tabla está en una GUI y Carrito solo debe guardar datos en esa tabla. No es necesario el patrón Singleton, nada más tienes que pasarle la referencia de la clase InterfazPrincipal a la clase Carrito que guardará la referencia en un objeto InterfazPrincipal. Recuerda que en Java el paso de parámetros es por referencia, así que cualquier cambio que se haga en la referencia, se guardará.

Código (=java) [Seleccionar]
public class Carrito {
InterfazPrincipal gui;

public Carrito (InterfazPrincipal gui) {
this.gui = gui;
}

public void agregar(String nombre , String precio){
       
       Object[] fila = new Object{"#", nombre , precio}; // importante, siempre debes introducir una fila Object
       DefaultTableModel modelo = (DefaultTableModel)gui.getModeloTablaCarrito();
       modelo.addRow(fila);
   }

}


Código (=java) [Seleccionar]

public class InterfazPrincipal extends JFrame {
// le pasamos la referencia de la clase a la clase Carrito
final Carrito CARRITO_DRIVER = new Carrito(this);

// otras cosas
}


O puedes hacer uso de reflection:

Código (=java) [Seleccionar]

public class Carrito {
InterfazPrincipal gui = Class.forName("paquete.Clase").getInstance();

public Carrito () {
}

public void agregar(String nombre , String precio){
       
        Object[] fila = new Object{"#", nombre , precio};
        DefaultTableModel modelo = (DefaultTableModel)gui.getModeloTablaCarrito();
        modelo.addRow(fila);
    }

}


¡Muchas Gracias!

#3
Java / Re: Problema con cola
25 Mayo 2014, 08:10 AM
Antes que nada creo que es mejor que

p.setVisible(true);
p.setBounds(0, 0, 300, 200);


Esten dentro del constructor de Principal

Para implementar los métodos de otra clase, es necesario que hagas una instancia de la clase y crees un objeto de esa clase, en este caso Cola(); entonces tu main te podría quedar como:


   public static void main(String[] args) {
   Principal p = new Principal();
   Cola cola = new Cola();

   // Implementación
   cola.insertar(2);
   cola.resetear();
   // etc...
   
   }


Que de hecho tu clase Pirncipal ya lo está implementando. Pero esa seria la forma, accedes por medio del indentificador donde se aloja la referencia hacia el Objeto de esa Clase.
#4
Java / Re: Enlazar 3 Clases
24 Mayo 2014, 21:12 PM
Cita de: Migugami en 24 Mayo 2014, 14:25 PM
Teóricamente, una nueva instancia es un nuevo objeto. Si tienes dudas sobre esto, puedes hacer la clase  InterfazPrincipal como un singleton.
Woah, esto no lo sabía, que genial. ¿Cómo se llama el tema relacionado a eso? para buscar mas información.


También de vuelta al problema en si, probé con lo que mencionas y otras combinaciones, pero no se refleja en la tabla, los metodos que utlizé. Cabe mencionar que no hay otra tabla en esa clase por lo que no hay problema en saber cual tabla es.

getModeloTablaCarrito() // Devuelve el modelo de la tabla
getTablaCarrito() // Devuelve la tabla

Los probé dentro de la misma clase, donde se encuentra la tabla y funcionan correctamente, por lo que me lleva a pensar que realmente obtiene la tabla solo que de otro objeto y no del "original". En unos momentos edito el tema y adiciono algunas notas importantes. Gracias por tu tiempo.
#5
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?

#6
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.
#7
Scripting / Re: [Batch] Ayuda con LOGIN
11 Abril 2012, 20:02 PM
Ya lo tengo, muchas gracias por la ayuda y siento molestarlos con esto tan trivial. Como decia Elektro, la verdad es muy sencillo, y de hecho casi estab cerca solo era modificar algo el argumento del comando FOR.

Revise videotutoriales la mayoria eran lamers que no me ayudaron en nada, lei repetidas veces los tutoriales que se presentaban en Sticky. Pero me olvide por completo revisar temas antiguos, ahora se que este tema ya esta visto, asi que no habria problema alguno si se decide borrar, nuevamente muchas gracias a todos. Saludos
#8
Scripting / Re: [Batch] Ayuda con LOGIN
11 Abril 2012, 18:44 PM
No, EleKtro H@cker, me has mal interpratado, no mw referia a una "pena" de lastima sino a que por pena mia o verguenza de no segueir molestando, no dije que no era precisamente lo que buscaba, aunque lo que me diste, realmente me ayudo y es mas dije textualmente en este tema, que fue lo que me animo a comprender bien el comando FOR.

No pretendia sonar prepotente si es que asi parecio, no creo haber abusado de las mayúsculas y si las utilize es por que crei realmente necesitarlas, para hacer el texto mas agradable y resaltar palabras clave,  como los comandos o el nombre del script.

Entiendo que es facil el codigo, pero la verdad, intente por mi mismo conseguirlo, pero como veras no tengo un gran conocimiento en esto como tu, a lo mucho llevo una semana y cabe resaltar que cada persona tiene capacidades diferentes para enteder cosas especificas.

Me disculpo, si es que te ofendi, a ti y al foro que moderas.
#9
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.


#10
Hehe, Creo que tendre que leer mucho mas. Gracias por la ayuda. Veo que el comando FOR amplia mucho el rango de cosas que puede hacer. Lo he visto muy complicado pero solo es cuestión de que practique con el, Gracias y Saludos.