|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - silverfox
Páginas: 1 2 3 [4] 5 6 ... 12
76
« en: Jueves 14 de Diciembre de 2006, 15:51 »
Hola... MEDICAMENTO medicina; supongo q esta creando una variable medicina de tipo MEDICAMENTO pero no seria asi: MEDICAMENTO medicina =new MEDICAMENTO() escape tiene razón aquí: Lo primero crea una variable, pero sin contenido. El new reserva espacio para ese contenido y lo inicializa a ciertos valores por defecto (ejecuta tu constructor, vamos). En este caso, no se necesita hacer un new, porque el resultado de la operación next() en tu código ya es un objeto con su memoria reservada y perfectamente creado, lo que estás haciendo sólo es 'señalarlo'. Probablemente, los new se harán dentro de la operación selectDatos(). y esta parte que significa: medicina = (MEDICAMENTO) iteradorListaMedicina.next(); no entiendo porque se coloca (MEDICAMENTO)..supuestamente hace referencia a la clase pero porque ponerlo d esa manera...no entiendo En el API de Java, el interface Iterator, puedes ver que next() devuelve un Object. Si quitas el (MEDICAMENTO), el compilador te dirá que no se puede convertir un Object a un MEDICAMENTO. Si utilizases el JDK 1.5 o superior, gracias a la implementación de los Generics (como los Templates de C++), podrías ahorrarte ese cast. Un saludo. Silverfox
77
« en: Jueves 14 de Diciembre de 2006, 15:36 »
Hola... Sin embargo, un boton llamado "aceptar" es unico, asi lo declaras, no puedes tener dos botones en una misma clase llamados"aceptar". ¿Y qué? Lo que cuenta no es el nombre de la variable, sino la dirección de memoria a la que apunta. Naturalmente, no puedes hacer que una variable apunte a dos sitios distintos a la vez, pero sí que puedes tener dos variables apuntando al mismo sitio. Cuando tu Event hace referencia al objeto emisor, utiliza una referencia a memoria, no el nombre de la variable... Por eso funciona, en realidad, estás comparando dos direcciones de memoria, que da la casualidad de que son iguales y por eso te dí la razón. A lo mejor es que no entendí tu primer razonamiento. El equals devuelve un boolean, para comprobar si hablas de dos objetos iguales. ¿Qué quieres decir con iguales? Es que, lamentablemente, si haces algo como: JButton a= new JButton(); JButton b= a;
a y b no es que sean iguales, sino que apuntan al mismo sitio -> son el mismo objeto. logicamente el if no sirve, porque apunta a una dirección de memoria, la cual seria distinta a pesar que el objeto tenga los mismos campos. Lamentablemente, y en el caso del JButton en particular, entre muchos otros, un equals tampoco serviría para comprobar la igualdad entre los campos Ejecuta esto, para comprobarlo: JButton a= new JButton("boton"); JButton b= new JButton("boton"); System.out.println((a==b )+" "+a.equals(b ));
Por cierto, sí que puedes tener varias variables que se llamen igual, con distintos ámbitos. (aunque no como variables de clase ambas, claro) Un saludo. Silverfox
78
« en: Martes 12 de Diciembre de 2006, 11:35 »
a pesar de ser cierto que el operador == no se utiliza para comparar instancias, esto es efectivo siempre y cuando se desee comparar el contenido de los objetos. Este código demuestra que te equivocas completamente: public class Test_Java2 { int a; Test_Java2(int i){ this.a= i; } public static void main (String args[]){ String aa= new String("test"); if(aa == "test"){ System.out.println(aa + " == \"test\""); }else{ System.out.println(aa + " != \"test\""); } if(aa.equals("test")){ System.out.println(aa + ".equals(\"test\") == true"); }else{ System.out.println(aa + ".equals(\"test\") == false"); } Test_Java2 t1= new Test_Java2(1); Test_Java2 t2= new Test_Java2(1); System.out.println(t1 == t2); } class Clase { int a; public Clase(int i){ this.a=i; } } }
El operador == compara la posición en memoria de los objetos, mientras que equals() compara cada clase de la forma implementada por ella misma (ya que casi todas las clases sobreescriben éste método, generalmente, haciendo comparaciones campo por campo (si son primitivas), o llamando a los equals correspondientes (si son otros objetos). Extraído de: http://www.devx.com/tips/Tip/12843The == operator returns true if the two handles on the left and right sides refer to the same location in memory. The function Object.equals() is intended to return true if two handles refer to logically equivalent instances. Extraído de: http://java.sun.com/mailers/techtips/corej...006/tt0822.htmlComparing with the == Operator
The == operator works on String object references. If two String variables point to the same object in memory, the comparison returns a true result. Otherwise, the comparison returns false, regardless whether the text has the same character values. The == operator does not compare actual char data. Without this clarification, you might be surprised that the following code snippet prints The strings are unequal.
String name1 = "Michèle"; String name2 = new String("Michèle"); if (name1 == name2) { System.out.println("The strings are equal."); } else { System.out.println("The strings are unequal."); } The Java platform creates an internal pool for string literals and constants. String literals and constants that have the exact same char values and length will exist exactly once in the pool. Comparisons of String literals and constants with the same char values will always be equal.
Comparing with the equals Method The equals method compares the actual char content of two strings. This method returns true when two String objects hold char data with the same values. This code sample prints The strings are equal.
String name1 = "Michèle"; String name2 = new String("Michèle"); if (name1.equals(name2) { System.out.println("The strings are equal."); } else { System.out.println("The strings are unequal."); } De todas formas, te funcionará bien, ya que en el fondo, estás comparando dos objetos idénticos, por ser ambos la misma referencia a memoria. Un saludo. Silverfox
79
« en: Lunes 11 de Diciembre de 2006, 11:55 »
Hola... Por lo que dices, tiene pinta de que no estás pasando lo que se llama un 'objeto vivo' (en este caso, 'lista viva') Fijate en la diferencia entre estos dos códigos, y su resultado final: Clase 1, intento 1: import java.util.*; public class Test_Java { public List lista= null; Test_Java(){} public static void main (String args[]){ Test_Java t= new Test_Java(); Test_Java2 m= new Test_Java2(); m.alterar_lista(t.lista); if (t.lista!= null) for (int i=0; i < t.lista.size(); i++) System.out.println(t.lista.get(i)); else System.out.println("La lista está vacía!!!"); } }
Clase 2, intento 1 import java.util.*; public class Test_Java2 { public Test_Java2() { } public void alterar_lista (List a){ a= new ArrayList(); a.add("obj1"); a.add("obj2"); a.add("obj3"); } }
Diferencia entre lo anterior y esto otro: Clase 1, intento 2: import java.util.*; public class Test_Java { public List lista= new ArrayList(); Test_Java(){} public static void main (String args[]){ Test_Java t= new Test_Java(); Test_Java2 m= new Test_Java2(); m.alterar_lista(t.lista); if (t.lista!= null) for (int i=0; i < t.lista.size(); i++) System.out.println(t.lista.get(i)); else System.out.println("La lista está vacía!!!"); } }
Clase 2, intento 2 import java.util.*; public class Test_Java2 { public Test_Java2() { } public void alterar_lista (List a){ a.add("obj1"); a.add("obj2"); a.add("obj3"); } }
A primera vista son iguales, ¿verdad? Espero que puedas sacar algunas conclusiones que te sirvan para solucionar tu problema. Un saludo. Silverfox
80
« en: Lunes 11 de Diciembre de 2006, 11:38 »
Hola...
Completamente cierto, su...
Para comparar dos objetos, necesitas usar Object.equals().
Mira si te funciona con eso.
Un saludo.
Silverfox
81
« en: Jueves 7 de Diciembre de 2006, 10:59 »
Hola...
Varias cosas:
Para empezar, el método toString() de la clase Object no está declarado como static, por lo que no puedes llamarlo Object.toString() (además, tampoco tiene parámetros, así que es completamente incorrecto. Lo que me extraña no es que te de error, sino que te compile, directamente.
Más cosas: No necesitas ese toString(). Si estás seguro de que lo que has metido como valor es una cadena, simplemente transformalo con un cast normal (String) lista.getSelectedValue().
La otra opción que tienes es usar toString(), que no te fallará nunca, aunque, si no es una cadena lo que tienes, puede que no te devuelva los resultados esperados: lista.getSelectedValue().toString()
Si te quedan dudas, deberías consultar el API de Java, clase String, en la parte de inherit methods, el recuadro de java.lang.Object
Espero que te sirva.
Silverfox
82
« en: Martes 5 de Diciembre de 2006, 16:33 »
Hola... Uhmmm... dificil pregunta la tuya... ¿crees que te servirá la clase Timer? Un saludo. Silverfox
83
« en: Martes 5 de Diciembre de 2006, 09:15 »
Hola...
Para comunicaciones:
Clase Socket. Clase ServerSocket.
La forma en que estén conectadas ambas máquinas es absolutamente indiferente, mientras estén en red y puedan acceder la una a la otra.
Ambas clases puedes encontrarlas en el API de Java.
Un saludo.
Silverfox
84
« en: Martes 5 de Diciembre de 2006, 09:12 »
Hola...
Lo más parecido a un fichero ejecutable en Java es un archivo JAR que pueda ejecutarse. Echa un vistazo a la creación de archivos MANIFEST.MF en la red para saber cómo se genera uno de estos JARs.
Un saludo.
Silverfox
85
« en: Lunes 4 de Diciembre de 2006, 09:28 »
Hola...
En principio, sí que existe la posibilidad.
Si lo que buscas es abrir un fichero con el juego de caracteres ASCII.
Las clases derivadas de OutputStreamWriter tienen un constructor que te permite definir la codificación del flujo de datos. Con eso puedes ver y cambiar la codificación de tus archivos.
Espero que te sirva.
Un saludo.
Silverfox
86
« en: Viernes 1 de Diciembre de 2006, 11:00 »
Hola.
Para seleccionar figuras tendrás que almacenar la información de la misma (como por ejemplo, la posición de los vértices, o el centro de la figura.
Cuando pulses el ratón, busca entre las figuras si la pulsación se realizó sobre el 'punto caliente' de una de ellas. Después, mueve las coordenadas de la figura seleccionada, de acuerdo con los eventos MouseMotion que estés recibiendo.
Espero haberte orientado un poco.
Suerte.
Silverfox
87
« en: Viernes 1 de Diciembre de 2006, 08:13 »
Hola.
Las clases Timer y TimerTask te permiten lanzar tareas cada cierto tiempo, una o varias veces.
También te permitirían lanzar un evento (en teoría), que pueda ser encolado en la cola de eventos swing.
Espero que te sirva.
Silverfox
88
« en: Viernes 1 de Diciembre de 2006, 08:05 »
Hola...
Si lees el API de Java, en la clase JTextArea verás (en los métodos heredados de JComponent) el método getText(). También podrás encontrar el método setText() o el append, que te servirán para escribir desde un fichero de texto.
El método loadFromFile no existe, que yo sepa, pero no es dificil fabricarse uno.
Un saludo.
Silverfox
89
« en: Viernes 1 de Diciembre de 2006, 07:56 »
Hola...
Puede deberse a que la imágen no ha terminado de cargarse, o también puede deberse a que no se refresca apropiadamente el componente cuando la pintas.
Para solucionarlo, trata de usar las clases de observación de imágenes a ver si es la primera, y reliza un update para ver si es la segunda.
Espero que lo soluciones.
Un saludo.
Silverfox
90
« en: Lunes 27 de Noviembre de 2006, 09:41 »
Hola... Pues sí... sí existe una forma de saberlo. El directorio temporal por defecto viene indicado como propiedad del sistema en la JVM. Lo único que tienes que hacer es lo siguiente: Properties propiedades_sistema= System.getProperties(); String default_temp_dir= propiedades_sistema.getProperty("java.io.tmpdir");
Espero que te sirva. Un saludo. Silverfox
91
« en: Lunes 27 de Noviembre de 2006, 09:33 »
Hola...
Para añadir un elemento a un ComboBox, se usa addItem(Object)
Un saludo.
Silverfox
92
« en: Lunes 27 de Noviembre de 2006, 09:31 »
Hola... En la primera edición del libro Thinking in Java (te remito a la primera, porque en las siguientes lo quitaron, según el autor, porque lo consideraban poco informativo ), había unas tablas de tiempos de instrucciones en Java. Aunque en Java no se puede hablar de duraciones e ciclos de reloj, como nuestros amigos de C, aquí se habla de duración en relación con la operación suma. (una suma = duración 1) Como resultado, y por lo que creo que tu programa va tan lento, es que la operación new tiene un tiempo de 250 (= 250 ops suma) y es la más cara de todas las operaciones en Java. En cuanto al recolector de basura, hay varias formas de llamarlo lo cual no garantiza que vaya a pasar inmediatamente. Echa un vistazo a los métodos gc() de Runtime y System, y al método runFinalization() de System, que sirven para tener (cierto) control sobre el recolector de basuras. También existen algunos argumentos para la JVM que te permiten cambiar la política del recolector, te recomiendo que busques por la red. Un saludo y espero que la parrafada te sirva de algo. Silverfox
94
« en: Lunes 27 de Noviembre de 2006, 09:12 »
Hola...
Para manejar puertos COM y LPT, se necesita la librería Javacomm, disponible en java.sun.com.
Las últimas versiones son para Unix, pero hay una también para windows.
Un saludo.
Silverfox
95
« en: Viernes 24 de Noviembre de 2006, 08:53 »
Hola...
Echa un vistazo a la clase Runtime.
Si son programas de Java a los que llamas, puedes modificarlos para que convertirlos en Thread / Runnable y correrlos en otras hebras.
Un saludo.
Silverfox
96
« en: Viernes 24 de Noviembre de 2006, 08:50 »
Hola...
Tu frame principal debe tener una variable JDialog desde la que se crea la ventana de introducción de datos. Cuando pulsas el botón tendrás que ponerle en el ActionPerformed la forma de la que quieres que se traspasen los datos de la variable JDialog a ella misma. Lo que no puedes hacer es comunicar desde la nada dos Component que no tienen nada que ver (o que no guardes una referencia a uno de ellos en el otro, al menos).
Hace poco había un post donde se hablaba de comunicación entre frames, echale un vistazo, quizá te sirva.
Un saludo.
Silverfox
97
« en: Viernes 24 de Noviembre de 2006, 08:47 »
Hola...
A partir de JDK 1.3, la biblioteca JCE (Java Crypto Extension) ya viene incluída con el paquete básico de clases JDK.
La clase Cipher te da opciones de algoritmos de distintas clases. Necesitarás un proveedor para según qué algoritmos, pero ya viene uno con la JDK, (v. clase Security.getProviders() ), en cada implementación de JDK han ido metiendo cosas nuevas, pero si quieres un algoritmo para el que no tienen soporte, necesitarás descargar algunas cosas de internet. Te remito a BouncyCastle, por ejemplo.
En cuanto a cosas de encriptación, ten cuidado con el almacenaje. En el caso de Linux, creo recordar, las contraseñas se almacenan encriptadas con DES3 y para compararla con la introducida, se encripta y se compara, porque es más rápido que desencriptar la que hay guardada. (No sé si me explico)
Espero que te sirva.
Un saludo.
Silverfox
98
« en: Viernes 24 de Noviembre de 2006, 08:34 »
Hola...
El control de lo que se escribe antes o después lo da la aplicación. El método paint() se lanza y se propaga por todos los componentes, por lo que depende de a quién le llegue primero.
De todas formas, yo te recomendaría que utilizases la forma de hacerlo que indiqué en el post titulado 'Fondo applet', donde tienen un problema bastante parecido al tuyo.
Espero que eso te sirva.
Un saludo.
Silverfox
99
« en: Martes 21 de Noviembre de 2006, 14:20 »
Hola... Echa un vistazo a ésta página. Espero que te sirva. Un saludo. Silverfox
100
« en: Martes 21 de Noviembre de 2006, 13:05 »
Hola...
El formato de números depende de tu configuración local (Clase Locale en Java, ver API).
En el caso de España (o puede que con configuración en Español), el punto decimal se representa con una coma y los separadores de miles son puntos.
Según el API, el patrón de DecimalFormat se forma con el caracter '.' para separador de decimales y ',' para los separadores de miles, que no tienen que coincidir necesariamente con el punto y la coma.
Por eso mismo, el patrón ##,###,###.#### te devuelve 1.234,56 y el patrón ##.###.###,#### te da un error (o bien, devuelve 12,3456)
DecimalFormat tiene un constructor que recibe como parámetro una instancia de la clase DecimalFormatSymbols. En esta clase es donde se pueden cambiar los caracteres que representan los separadores de miles y los de decimales que hay por defecto. Echa un vistazo al API de ambas clases.
Un saludo.
Silverfox
Páginas: 1 2 3 [4] 5 6 ... 12
|
|
|