Hilo oficial Java

1, 2, 3, 4, 5, 6
kerri escribió:gracias tío, no había visto eso por ningún lao, o se ma pasao.

Ya, lo de las excepciones lo tengo en cuenta, me tengo q poner a ver cómo van. De momento pruebo la funcionalidad más importante y lego q el nota q use la aplicación no me kiera meter "once" en vez de "11"

Lo de las excepciones es mejor usar las q ya trae el java por defecto (con el try y el catch) o hacer el control en el manejo de eventos (a base de if)?

Un saludo.


Por supuesto es mejor el try-catch, en este caso si se produce una numbreexception pues le dices que saque un mensaje diciendoq ue meta un entero y listo.

Yo no ocntrolaria en java excepciones con if, aunque a veces no hay otra forma :D
pos no me furula al ejecutar el applet desde el iexplorer, mientras q desde el jbuilder al ejecutar el html si funciona bien lo de la captura del valor del JTextField.

El código q controla el evento q está registrado al JTextField es este:

class ProcTextField implements ActionListener{
public void actionPerformed(ActionEvent e) {

JTextField text_aux = (JTextField)e.getSource(); // Textfield auxiliar.
int valor = Integer.parseInt(text_aux.getText().trim()); // Paso a entero la cadena de texto.
slider_valor.setValue(valor); // Establezco el valor del JSlider
}
}

¿Por q puede ser esto?

Más detalles: El applet llama a una clase q genera un bloque básico formado por un JSlider, un JTextField y un JLabel. Desde este applet genero 4 bloques para controlar la entrada de 4 parametros.

La actualizacion del JTextField a partir del JSlider rula bien, pero al revés no. Me rallo.

EDITO:

He probao a ejecutar el applet usando el appletviewer del jdk y rula a la perfección. Será algún problema del explorer? Se supone q con el JRE instalao no debería haber problemas , ¿no?

SALUDOS
Mira a ver si tienes en el html bien puesto la llamada al applet, y si en el explorer tienes activado java.

Otra cosa no se me ocurre
Lo q es mu raro es q en el explorer aparezca bien todo el applet y lo unico q no funcione sea q al introducir el numero en el textfield no se actualice la jslider. La llamada al applet en el html está bien.

de todas formas debe estar activo lo de java(ahora no estoy en la facu) en el iexplore puesto q todos los applet si salen.

¿?¿? Oooh

Otra cosa: ¿¿habéis hecho alguna vez representaciones gráficas (plots) o trabajado con números complejos?? Yo me estoy fijando en PTOLEMY.

Por si alguien quiere exar un vistazo:

http://ptolemy.eecs.berkeley.edu/ptolemyII/

saludos.



EDITO: SOBRE PACKAGES

A ver resulta q he instalao el ptolemy q incluye unos packages q me serían de utilidad. Por ejemplo tiene un package "math" q me gustaría poder importar a mi proyecto q estoy haciendo en JBuilder.

¿Cómo importo dicho package? La cuestión es q el ptolomy lo tengo instalado en una unidad de disco distinta a la q tenga instalado el JBuilder (por cuestiones de permisos en el laboratorio).

Gracias.


EDITO 2: Parece q lo he conseguio.

Pues resulta q se instalan todos los archivos .java en "ptII5.0\ptolemy\math" y me taba rallando porq no sabia como importar eso (sobre todo porq no veía los .class por ningún lao). Pero me dao cuenta q en "ptII5.0\ptolemy" hay un archivo "ptsupport.jar" con los .class dentro, q he podio añadir al path de mi proyecto en el JBuilder, y tras esto, ya me daba la opción de importar toda la morralla q me hacía falta.

La verdad es q es una pollada, pero es q es la primera vez q lo hago. [toctoc]

Si estoy haciendo algo mal, o si pudiera hacerlo mejor, please contadme.

Saludos. [beer]
a ver si algún alma caritativa me puede ayudar en mis dudas:

1º) Esta es la que más me interesa. Tengo un JTextArea (texto) y quiero que el contenido de ese objeto se grabe en un fichero txt. Para conseguir el nombre y la ubicación del fichero uso la clase JFileChooser (chooser). No sé muy bien cómo empezar a coger el texto y pasarlo a un fichero.

Para abrir un fichero txt lo he hecho así (y funciona bien):


java.io.BufferedReader dis = new java.io.BufferedReader(new java.io.FileReader(chooser.getSelectedFile()));
String archivo = new String(dis.readLine());
texto.setText("");
while (archivo!=null) {texto.append(archivo + "\n"); archivo = new String (dis.readLine());};




y para guardar el textooa un fichero lo he intentado así, pero no me va. me falta algo:


chooser.getSelectedFile().createNewFile();
java.io.BufferedWriter dis = new java.io.BufferedWriter(new java.io.FileWriter(chooser.getSelectedFile()));
dis.writeChars(texto.getText());



ya sé que está fatal, pero no se me ocurre cómo hacerlo.




2º) Otra pregunta: qué es que se pueda serializar??? es que en un ejercicio me dicen que una clase se pueda serializar y clonar. Para clonar creo que lo único que hay que hacer es definir el método clone() dentro de la clase, ¿no? ese obviamente hace una copia del objeto.

Supongo que serializar será lo mismo, pero no sé ni qué método hay que definir, ni de qué interface se trata, ni de qué hace ese método.


3º) la última duda. No entiendo muy bien para qué sirve lo de throw y throws. Si tu quieres que una excepción se lance, ¿no es suficiente poner "try{ } catch (){}"??
Darkoo escribió:a ver si algún alma caritativa me puede ayudar en mis dudas:

1º) Esta es la que más me interesa. Tengo un JTextArea (texto) y quiero que el contenido de ese objeto se grabe en un fichero txt. Para conseguir el nombre y la ubicación del fichero uso la clase JFileChooser (chooser). No sé muy bien cómo empezar a coger el texto y pasarlo a un fichero.

Para abrir un fichero txt lo he hecho así (y funciona bien):


java.io.BufferedReader dis = new java.io.BufferedReader(new java.io.FileReader(chooser.getSelectedFile()));
String archivo = new String(dis.readLine());
texto.setText("");
while (archivo!=null) {texto.append(archivo + "\n"); archivo = new String (dis.readLine());};




y para guardar el textooa un fichero lo he intentado así, pero no me va. me falta algo:


chooser.getSelectedFile().createNewFile();
java.io.BufferedWriter dis = new java.io.BufferedWriter(new java.io.FileWriter(chooser.getSelectedFile()));
dis.writeChars(texto.getText());



ya sé que está fatal, pero no se me ocurre cómo hacerlo.




Yo lo hago asi:

Este metodo es para guardar en un archivo lo que se le va pasando, lo abre, lo guarda y lo cierra.
public static void Escribirenarchivo(String texto)
  {
    try
    {
      FileOutputStream pw = new FileOutputStream(archivo.txt, false); //El false es para que se pueda añadir mas texto despues
      BufferedOutputStream p = new BufferedOutputStream(pw);
      p.write(texto.getBytes());
      p.flush();
      p.close();
      pw.flush();
      pw.close();
    }
    catch (FileNotFoundException fnfe)
    {
    }
    catch (IOException ioe)
    {
    }
  }


Darkoo escribió:2º) Otra pregunta: qué es que se pueda serializar??? es que en un ejercicio me dicen que una clase se pueda serializar y clonar. Para clonar creo que lo único que hay que hacer es definir el método clone() dentro de la clase, ¿no? ese obviamente hace una copia del objeto.

Supongo que serializar será lo mismo, pero no sé ni qué método hay que definir, ni de qué interface se trata, ni de qué hace ese método.


Al serializar una clase, loq ue se hace es guardar un objeto en un archivo, esto se hace para por si acaso el programa se cierra, u ocurre cualquier cosa, para asi no perder datos.

Para serializar, se pone implements Serializable al decalrar la clase, y despues se guarda el objeto en un fichero, un ejemplo de guardar un objeto en un fichero podia ser:

FileOutputStream fos = new FileOutputStream("fichero.bin");
   FileInputStream fis = new FileInputStream("fichero.bin");
   ObjectOutputStream out = new ObjectOutputStream(fos);
   ObjectInputStream in = new ObjectInputStream(fis);

   ClaseSerializable o1 = new ClaseSerializable();   
   ClaseSerializable o2 = new ClaseSerializable();   

   // Escribir el objeto en el fichero
   out.writeObject(o1);
   out.writeObject(o2);
   ...
   // Leer el objeto del fichero (en el mismo orden !!)
   o1 = (ClaseSerializable)in.readObject();
   o2 = (ClaseSerializable)in.readObject();



Darkoo escribió:3º) la última duda. No entiendo muy bien para qué sirve lo de throw y throws. Si tu quieres que una excepción se lance, ¿no es suficiente poner "try{ } catch (){}"??


throw y throws sirve para saltarse las excepciones, y try{ } catch (){} para capturarlas y poder tratarlas si se desea, lo entenderas mejor con un ejemplo.

Imagina que tienes un campo de texto en el que se debe introducir un numero para sumarlo ocn otro, pues bien si metes una letra, al convertirlo a entero, te dará una excepcion NumberFormatException entonces si no capturas ni te saltas esa excepcion, el programa se cerrará con un error, o se bloqueara o cualquier cosa. Para evitar eso tenemos dos opciones.

1.- Si utilizamos throw o throws el programa se saltará ese paso, no se cerrará ni se bloqueara, pero tampoco hará loq ue tiene que hacer, puesto que el parametro metido no es correcto.

2.- Si utilizamos try{ } catch (){} capturaremos la excepcion, y por ejemplo podemos hacer que si se lanza la misma, pues nos muestre un cuadro de dialogo diciendo que metamos un numero, por ejemplo

   try
    {
      //Aqui pondriamos el codigo a evaluar
    }
    catch (NumberFormatException nfe)
    {
     //Aqui pondriamos que hacer si se lanza la excepcion, podemos no poner nada
    }




Espero que te sirva, saludos
ostris, mil gracias daniel, te lo curras mogollón.

La duda tres resuelta. Ahora entiendo lo de la excepciones bien.

[EDITO] El primer ejercicio ya ta



Lo de serializable ya lo he pillao. Lo único, ¿cómo se llama el método a redefinir?


Enga, muchas gracias.
Darkoo escribió:Lo de serializable ya lo he pillao. Lo único, ¿cómo se llama el método a redefinir?


NO entiendo loq ue dices con el metodo a redefinir, lo de implements serializable, se pone al definir la clase, por ejemplo

public class NombreClase implements Serializable
{
}

Para serializar debes hacer un Import java.io.*
serializable es una interfaz y por lo tanto tiene sus métodos abstractos. Entonces habrá que definir los métodos de la interfaz, ¿no?
Pero esa interfaz ya es de la API, ya viene definida e implementada, tu solo usas sus metodos.

De todas formas esta interfaz no tiene metodos, solo se usa para identificar que es serializable. Los metodos están en java.io.* y no son de una interfaz sino de otras clases, por eso no hay que definirlos ni redefinirlos.

Mirate la API veras como no tiene metodos esa interfaz ;-) y que metodos como ObjectOutputStream no son de esa interfaz, que son los que se utilizan para guardar el objeto en un fichero.
vale, vale, ya lo pillo más o menos.

Mil gracias por to!!!!!!!
A ver kiero hacer lo siguiente.

En un applet tengo definido lo siguiente:

Plot panel5 = new PlotCoseno();

Plot es una clase q me bajao q sirve pa pintar graficas, q hereda de JPanel.
PlotCoseno es una clase independiente q me programao yo, q lo q hace es dibujar un coseno.

Esta clase la definí así:
public class PlotCoseno extends Plot
y dentro de ésta creo un objeto:
Plot miPlot = new Plot();

La cuestión es que hay un método por ejemplo:
miPlot.clear(1);
Q borra la gráfica. Esto dentro del codigo de la clase PlotCoseno rula perfect.

Pero si lo hago desde el applet:
panel5.clear(1);
Compila y eso, pero después no borra la gráfica.

¿Por qué puede ser esto?

EDITO:

Básicamente necesito hacer esto porq por ejemplo desde el applet llamo a un objeto de una clase mía q forma un bloque "JSlider" + "JTextField", y necesito por ejemplo q al modificar el JSlider, varíe la frecuencia del coseno q he creado en la otra clase.
El applet pone en un JPanel el bloque del Jslider y en otro el plot del coseno. Y desde él necesito poder acceder a los métodos de estos objetos, pero no se cómo hacerlo.

Muchas gracias.


EDITO2: Problema resuelto. Gracias. Era una pollada. :-)


EDITO3: NUEVA DUDA, SEÑORES!!!!

A ver, tengo una clase, "Fulanita" con tres variables miembro, una de tipo JSlider, otra JTextField, y otra JLabel.

Desde un applet, registro un un receptor de evento "ChangeListener" al JSlider del objeto "Fulanito1" de la clase "Fulanita", es decir:

Fulanito1.barra_slider.addChangeListener(receptor q sea);

Quiero q cuando cambie el JSlider se refleje el cambio en el JTextField, pero dentro del método stateChanged, no sé como referenciar el Fulanito1.campo_texto. Os pongo el código del evento.


class ProcFreq implements ChangeListener {

public void stateChanged(ChangeEvent e) {

JSlider slider_aux = (JSlider)e.getSource();

int valor = slider_aux.getValue(); // Capturo valor de la barra.

String texto = Integer.toString(valor); // Convierto el valor a String.

// slider_aux.setText(texto); // NO RULA: Pongo el valor capturado en el textfield.

// porque trabajo con el JSlider y no el objeto MiSlider2

// El evento del TextField se controla en MiSlider2.

plot.replot(valor); // Redibujo el coseno a la frecuencia seleccionada.
}


A ver si alguien me dice como puedo referenciarlo. ¿Podría obtener a partir de "e", su contenedor q es tipo JPanel y a partir de ahí manejar el JTextField?
¿O podría pasar de alguna forma como parámetro al método stateChaged el JTextField?

Saludos.
Holas, me estoy iniciando en Java, y me preguntaba si existe un IDE con diseñador gráfico de SWING, o sea, ir poniendo componentes mano y luego ya ir editando código. Decidme varios para ver cual me va en mac osx.

Un saludo.
Buenas, necesito saber cómo hacer para que cuando saque un diálogo desde un marco, e introduzca información en el, al dar a "Aceptar" esta info le llegue al marco en cuestión.

No hablo de los diálogos predefinidos, sino de uno hecho por mi entero.

Muchas gracias
:-P
No acabo de entenderlo muy bien. No sé si hablas de usar ventanas emergentes o algo y meter diálogos en ella. Es q no entiendo bien lo de "cuando saque un diálogo desde un marco". A q clase de componentes te refieres?
A ver si nos entendemos X-D

Yo tengo un marco, y un botón en el que cuando lo pulsas, el marco queda en 2º plano, y sale un diálogo modal, que lo he hecho yo creando una nueva clase, etc

En este diálogo, se introduce una información, y al dar a "Aceptar" o "Cancelar", el diálogo desaparece, volviendo el foco al marco inicial.

Lo que no se, es como pasar la información a el marco inicial.

Un saludo!
ya lo voy pillando... q componente es el marco en cuestión? Un internalframe o q? Un jpanel? más datos please.
Pues es un Jdialog, me parece vamos

public class NuevoRegistro extends JDialog {

Eso es lo que pone la clase, esque yo para introducirlo, lo hago con el jbuilder y le doy a nuevo -->dialogo


Un saludo!!
Mírate esto:
http://www.programacion.com/tutorial/swing/
Busca un epígrafe dónde pone "Cómo crear diálogos".

Yo tb estoy usando JBuilder pa mi pfc. Y en un momento tendré q usar cuadros de diálogos o internal frames para mostrar cuadros de ayuda sobre el applet q estoy haciendo. Lo miraré más adelante. Ya me contarás. Si no te sirve, dame el toque y miramos la api de java.

Un saludo.
Fox escribió:Holas, me estoy iniciando en Java, y me preguntaba si existe un IDE con diseñador gráfico de SWING, o sea, ir poniendo componentes mano y luego ya ir editando código. Decidme varios para ver cual me va en mac osx.

Un saludo.


JBuilder, Netbeans creoq eu tenia un plugin, y Eclipse también.

Saludos


ShiVaK escribió:A ver si nos entendemos X-D

Yo tengo un marco, y un botón en el que cuando lo pulsas, el marco queda en 2º plano, y sale un diálogo modal, que lo he hecho yo creando una nueva clase, etc

En este diálogo, se introduce una información, y al dar a "Aceptar" o "Cancelar", el diálogo desaparece, volviendo el foco al marco inicial.

Lo que no se, es como pasar la información a el marco inicial.

Un saludo!


Yo lo digo siempre a que si Kerri XD

Con lo facilq ue es hacer las cosas "a pelo" y mas con el JBuilder que el editor swing es una kk.

Para hacer lo que comentas, te doy un consejo, si solo tienes que pasar un dato, utiliza un JOPtionPane si son mas un JDialog, y para pasar los datos, pue stendrás un evento que al pulsar "aceptar" o "cancelar" haga una cosa u otra, pues bien debes poner dentro de ese evento que ademas de cerrar el dialogo, pase los datos de los componentes Swing a las variables, como si fuera en un marco normal.

Saludos
Hombre Dani!, pensaba q te habías ido 7 años al tibet u algo [jaja]

La verdad es q el JBuilder mete pexá de mierda q lo flipas, pero weno después se puede limpiar fácil.
Sobre el editor de Swing, yo la verdad le taba cojiendo el truco a pelo, pero mi interfaz lo estoy haciendo en GridBagLayout, y no veas si con el editor del JBuilder es más cómodo.
Ese controlador de distribución es superxungo de manejar al principio, pero una vez controlaillo, es mu potente. Yo estoy usando esto, por el tema de redimensionar la pantalla y posibles cambios de resolución.

Por cierto, me vendría bien q alguien me comentara dónde puedo leer sobre tratamiento de imágenes. Me refiero a q en los botones de mi interfaz voy a tener q poner imágenes de circuitos, y me interesa controlar cosas como q al hacerse más grande el botón, la imagen cambie tb de tamaño. No recuerdo haber leido nada en los tutoriales de programacion.com.

Un saludo.
kerri escribió:Hombre Dani!, pensaba q te habías ido 7 años al tibet u algo [jaja]


Mas o menos xD este mes no tengo na de tiempo libre.

Yo sigo diciendo que para meter "mierda" y luego quitarla, es mejor no meterla (La "mierda" claro)xD


Saludos
A ver, necesito poner unas imágenes en unos botones determinados. Esto se hace con la clase ImageIcon, y sé asignar más o menos iconillos a los JButton.
Pero lo q necesito es por ejemplo controlar cosas como q la imagen ocupe toda la superficie del botón, controlar la posición exacta de una imagen dentro de un botón más grande q la imagen y conseguir q si el botón se hace más grande o más pequeño, la imagen lo haga igual.

¿Existen métodos q me ayuden a todo esto?

EDITO: Añado un gif a un botón por ejemplo, pero el botón se agranda un poko, cuando el gif es bastante más pequeño q el botón. Lo q pretendo es q un gif pueda ocupar un botón de su mismo tamaño. Me estoy mirando las clases ImageIcon, JButton e Image, pero no encuentro nada. HELP!!!

Un saludo.
A ver si me podeis ayudar, creo que necesito una rutina java, pero no tengo ni idea de java.

Necsito hacer un formulario con Adobe professional, que sea dinamico, es decir necesito que cuando el usuario me introduzca tal dato ( por ejemplo sexo), se despliegue una parte de formulario distinta que si elije el otro sexo.

Como hago eso?

Gracias
Kerri de loq ue comentas no tengo ni idea, yo solo s eponer imagenes y ya :P


tancitaro_11 escribió:A ver si me podeis ayudar, creo que necesito una rutina java, pero no tengo ni idea de java.

Necsito hacer un formulario con Adobe professional, que sea dinamico, es decir necesito que cuando el usuario me introduzca tal dato ( por ejemplo sexo), se despliegue una parte de formulario distinta que si elije el otro sexo.

Como hago eso?

Gracias



Mmmm no se a que te refieres, pero en java eso es facil, chequeas la opción que se ha seleccionado y miras a ver el sexo, y en funcion de si es masculino o femenino, metes en una lista unas opciones u otras. En unas 10 lineas está hecho

Saludos

P.D: Si es exacatamente java y no te sale comentamelo a ver que podemos hacer
Pues mira a ver si te lo puedo explicar bien. No se si es exactamente java puro.

Me han encargado un proyecto de hacer formularios en Adobe professional, y en esos formularios hay opciones que quieren que sean dinámicas, es decir que aparezcan unas o desaparezcan otras según lo que vayamos seleccionando.

A ver un ejemplo mas claro

Por ejemplo tengo un campo que es "número de clientes", que al teclear el usuario, o al seleccionarlo en el desplegable del formulario, por ejemplo "4 clientes" aparezcan 4 campos con nombre y apellido. Si teclea o selecciona "2" que sólo aparezcan 2 y asi sucesivamente.

Esto todo es con el Adobe professional, pero admite rutinas java, creo que es asi, por que estoy mas perdido...

Si no puedes ayudarme no te preocupes preguntare que alguien lo sabra en la empresa.. creo [carcajad]
A ver q stoy rallao.

Mi applet se llama Modulo1 y tiene 3 pantallas. La base de Modulo1 es un JPanel con un CardLayout, donde las "cartas" serían las 3 pantallas (Modulo1_1, Modulo1_2, Modulo1_3).

Cada pantalla Modulo1_X la he implementado como una clase q hereda de JPanel.
Por ejemplo la pantalla1 tiene 6 botones, y al pulsar uno de ellos con un dibujo determinado, se debe pasar a la pantalla2, q tiene un JLabel q debe actualizarse con el dibujo seleccionado.

Bien la pregunta es la siguiente, ¿toda la gestión de eventos debe tratarse en el código de Modulo1(el applet q es un JPanel con cardlayout)?
Porq por ej trato de acceder a una variable miembro de Modulo1_2 (el jlabel q kiero actualizar), desde el código de la pantalla Modulo1_1, al pulsar un botón de ésta última, y no puedo.

Otra forma de decirlo, ¿no me qda más remedio q desde Modulo1 usar sentencias del estilo ObjetoClaseModulo1_2.VbleMiembroClaseJLabel.setIcon(new imageIcon... etc) ? Todo esto después de haber registrado el receptor de eventos para los botones de la pantalla Modulo1_1, en el codigo de Modulo1, porq aunq los registre en Modulo1_1, al implementar el actionperformed en Modulo1_1, no puedo accededr al label de Modulo1_2.

Si no me entendéis, pensad en un dibujo de un circulo muy grande, q sería el applet q se llama Modulo1, y dentro de este circulo muy grande hay tres pequeños pero independientes entre sí: Modulo1_1, Modulo1_2, Modulo1_3.
Cada uno de estos tres es un objeto con sus variables miembro (los botones, los labels, los textfields, los jpanels). La cuestión es q desde el circulito Modulo1_1 (al pulsar un botón con receptor actionEvent asociado), no puedo hacer cambios a las variables miembro de Modulo1_2 (el JLabel cuyo dibujo me gustaría actualizar), ¿verdad? Todo habría q hacerlo desde el circulo grande, desde donde se tiene acceso a los tres circulos pequeños, ¿no?

Un saludo y disculpadme si me he enrollado demasiado. Es q stoy hexo un lío sobre como diseñarlo todo.

Gracias.
a ver q pasa. ayuda urgente!!! no doy con la siguiente movida.

tengo un jpanel, con un CardLayout como distribuidor de componentes. Segun dixo CardLayout, coloco 4 labels por ejemplo, para q solo haya uno visible.

Quiero q otro jlabel distinto, en otro panel por ejemplo, sea iwal al q aparece en lo alto de la baraja, al q este visible en un momento determinado kiero decir. ¿Cómo lo hago?

Esto me serviría para actualizar un jlabel en otra pantalla, al ir variando el label visible en la baraja.

Un saludo y gracias.
Hola!

Tengo un problemilla, capturo un action command de un botón, y claro lo q capturo es un String, y me haría falta usar ese string pa referirme a un objeto, cuyo nombre coincide con el action command, es decir, el objeto se llama igual q un ActionCommand asociado a un botón, por ej.

Ejemplo:

pantalla3.PanelBarajaParam.add(CTO_BASE,cto1.PanelElementosCtoBase);

cto1 es el nombre del objeto. Esto asi funciona bien, pero lo q quiero es sustituir cto1 por algo q me valga para cto2, cto3, cto4 etc...

Algo semejante a esto:

pantalla3.PanelBarajaParam.add(CTO_BASE,e.getActionCommand().PanelElementosCtoBase);

Pero claro esto ya no funciona, porq e.getActionCommand() me devuelve un string, por ejemplo: "cto1". Y lo q necesitaría es capturar sólo cto1.

¿Cómo lo hago? ¿Alguna forma de capturar unicamente el nombre sin las comillas?

Un saludo.
Si tenemos una List y le quitamos con la función remove un elemento, ¿el index del resto varía o es igual?
¿Cómo hago una copia de un objeto?
Hola tengo 1 ejemplar de la clase "Circuito1", otro de la clase "Circuito2"... y asi hasta "Circuito6". Total, 6 objetos distintos.

En una pantalla selecciono uno de los 6 circuitos, y quiero guardarlo en un objeto para ir trabajando ya solo con ese objeto.
Os pongo el código:

if (e.getActionCommand().equals("cto1"))
{

pantalla3.PanelBarajaParam.add(CTO_BASE, cto1.PanelElementosCtoBase);
cto=cto1; //Esta es la parte q creo estoy haciendo mal!!!

}

resulta q no se cómo hacer una copia exacta del objeto cto1 de la clase Circuito1 en cto q es de la clase Object.

Resumiendo, necesito un objeto en el q poder guardar cto1 o cto2 o cto3 etc, para trabajar con ese objeto en el resto del applet, y no tener q sixtiplicar el codigo.

Me entendéis? Por favor respondedme q estoy agobiaete.

Un saludo
Utiliza el método clone() ;-)
Lo he probado pero no me funciona. Te explico.

Asi tengo declarado los objetos implicados:

Circuito1 cto1 = new Circuito1();
Circuito2 cto2 = new Circuito2();
.
.
.
Circuito6 cto6 = new Circuito6();

Object cto;


Después en un evento de un JButton según el botón pulsado, quiero almacenar el ctoX q sea (X=1,2,3,4,5, o 6).
Lo he intentado con la siguiente sentencia dentro del actionPerformed de la clase receptora de eventos:

cto=cto1.clone();

Para lo cual la clase Circuito1 debe implementar el interfaz Cloneable. Pero el compilador me dice q el método es protected. ¿Tengo q sobreescribirlo? Porq no sé cómo hacerlo. [mad]

Un saludo.

EDITO:
En un tutorial encontré q debía sobrescribir el metodo clone(). Lo q he hecho ha sido declarar q la clase Circuito1 implementa el interfaz Cloneable, y en la clase Circuito1 sobrescribir el metodo clone de la siguiente forma:

public Object clone()
{
Object clone = null;
try
{
clone = super.clone();
}
catch(CloneNotSupportedException e)
{
// No deberia suceder
}
return clone;
}

Usando la sentencia cto=cto1.clone(); en el código principal, el compilador no se queja, pero sin embargo, en "cto" no tengo las variables miembro (unos arrays y unas variables double) q si tengo en cto1.
[mad] ayuda please!
Sí, tienes que redefinirlo. Es sencillo, implementa ese interfaz (puedes hacerlo sin él también, pero te saltas el modo de hacerlo de Java).

Luego creas el método clone(), que devuelva un nuevo objeto pero con los mismos atributos del actual. Es lo que hace por ejemplo el clone() de ArrayList.
Cuando te refieres a los mismos atributos q el objeto actual, te refieres a q tenga las mismas variables miembro, no? Y cómo le asigno esos atributos?
Imagina que cto1 tiene un double R, ¿q tendría q introducir en el codigo del método clone?

EDITO: si el objeto cto1 tiene variables miembro no primitivas, es decir, ejemplares de otras clases creadas por mí? el proceso es igual q para el double? o esas clases tb deben implementar el interfaz cloneable y rescribir el metodo clone?

un saludo y muchas gracias por estar contestando tan rapido.
Tengo un poco oxidadillo Java, es posible que me equivoque :)

Suponiendo esta clase:

class Pepe{
int a;
int b[];
}

definir su método clone() sería algo así:

Object clone()
{
Pepe temp = new Pepe();
temp.a = this.a; //atributo simple, se copia asignando su valor
temp.b = this.b.clone(); //atributo no simple, si se asigna se estaría copiando su dirección, no su contenido. El array tiene el método clone() definido, lo usamos.

return temp;
}

Con esto creo que te respondo a todo ;)
sigue sin funcionar... :(
gracias por tu esfuerzo, tío.
Mira a ver que falla porque funcionar, funciona:



public class Prueba implements Cloneable {
   
   public int a;
   public int b[];

   public Object clone(){
      Prueba temp =new Prueba();;
      temp.a= this.a;
      temp.b = (int[]) this.b.clone();
      return temp;
   }
      
   
   public static void main(String[] args) {
      
      Prueba p = new Prueba();
      
      p.a=2; p.b=new int[10];
      try{
         Prueba p2 = (Prueba) p.clone();
         
         System.out.println(p.a + "    " + p.b[0]);
         System.out.println(p2.a + "    " + p2.b[0]);
         
         System.out.println(p == p2);
         
         
      } catch (Exception e)
      {
         e.printStackTrace();
      }      
   }
}
Y si lo hacemos asi??



public class Obj1 implements Cloneable{
private Obj2 origen;

public Obj1() {
origen = new Sit(0, 0);
}
public Object clone(){
Obj1 obj=null;
try{
obj=(Obj1)super.clone();

}catch(CloneNotSupportedException ex){
System.out.println(" no se puede duplicar");
}
obj.origen=(Obj2)obj.origen.clone();
return obj;
}
}


Asi lo hago yo y me funciona
Buenas, estoy por aqui de nuevo :)

Aun no me he metido con java, pero creo que ahora voy a echarle un vistazo a fondo.

Yo a java le veo muchas ventajas, sobre todo portabilidad y cantidad de librerias y documentación.

Pero la VM la veo como un punto muy negro. Un programa con swing super cutre con 3 botones ya está usando mas de 30 mb de ram por culpa de la maquina virtual, y como el programa ya sea un poco mas grande, vease azureus, ya empiezan a ser lentos, pulsas un boton y tarda en responder, o los menus, etc...

Ahora una pregunta, por que los packages suelen empezar por org.com?

Que opinais?

Un saludo.
Hola, creo q ya tengo controlao el tema del método clone(), pero mi problema es más grave de lo q pensaba.

La cuestión es q he de poder hacer lo siguiente:

Imaginaos q tengo 6 objetos de 6 clases distintas: cto1 de la clase Circuito1, y así hasta cto6 de la clase Circuito6.

La cuestión es q en una pantalla con 6 botones he de asignar a un objeto cto_seleccionado el circuito q sea, y así poder trabajar con este objeto en el resto de métodos q tiene mi aplicación, fuera del actionperformed donde llamo al método clone de la clase CircuitoN q sea.

La cuestión es q esta variable cto_seleccionado, ¿de qué clase ha de ser?

Me haría falta una clase q pudiera ser compatible con las 6 anteriores o algo así, pero no sé cómo manejarlo.

Please si no se entiende lo explico mejor, pero contestadme si podéis.

Muchas gracias.

EDITO: Pa simplificar lo anterior, lo q necesito es asignar/copiar en un objeto de clase X, q no tengo ni idea de q clase debe ser, un objeto de 6 posibles clases distintas, para trabajar con el objeto de la clase x durante el resto de la aplicación.
Fox escribió:Pero la VM la veo como un punto muy negro. Un programa con swing super cutre con 3 botones ya está usando mas de 30 mb de ram por culpa de la maquina virtual, y como el programa ya sea un poco mas grande, vease azureus, ya empiezan a ser lentos, pulsas un boton y tarda en responder, o los menus, etc...


Ahora que leo esto, alguien sabe que es o fue de la MVM? se comentaba que solucionaria esos problemas de velocidad.

http://java.sun.com/developer/technicalArticles/Programming/mvm/


Kerri, me he perdido :P
daniel_5 escribió:me he perdido

Hola dani. Básicamente me gustaría poder referirme a un objeto de una u otra clase, mediante algún tipo de objeto "comodín".

Te lo pongo al estilo pseudolenguaje:

Código del actionperformed:
si (source==botón1) entonces
circuito=cto1;
si (source==botón2) entonces
circuito=cto2;
.
.
.
si (source==botón3) entonces
circuito=cto6;

fin del actionperformed.


La cuestión es q simplemente me gustaría manejar con "circuito" el circuito seleccionado, sea el 1, el 2 o el q sea.
De esta forma, ya en el código general podría hacer cosas del estilo:

representar(circuito.tensión);
validar(circuito.resistencia);

Y no tener q poner estas 2 sentencias (q en el codigo general son muxas más) para cada "cto":

representar(cto1.tensión);
validar(cto1.resistencia);

representar(cto2.tensión);
validar(cto2.resistencia);

representar(cto3.tensión);
validar(cto3.resistencia);

y así hasta 6 veces. Imagina el follon de codigo q puede salir (6 veces más largo). Eso es lo q quiero evitar hacer.
En verdad no necesito crear una copia distinta de los objetos, me bastaría poder referirme a ellos de alguna forma, pero con una variable.

Se entiende mejor ahora? Please contestadme.

Muchisimas muchisimas gracias de antemano.

Un saludo.
No se si me he entrado bien XD a ver si si.

Y si en vez de poner en la calse general que comentas 6 veces toda esa parrafada, lo pones una vez, y le pasas a representar() y a validar() los objetos directamente en vez de como variables?? no seri alo mismo pasarlos directamente que pasarlso a una variable y pasar esta a los metodos??
porq creo q tendría q modificar todo el codigo q llevo hecho. O lo mismo ahora no te entiendo yo?

te lo voy a comentar de otra forma:

imagina tener un puntero,¿vale?. Pues en una pantalla tengo 6 botones, y yo kiero que en funcion del boton pulsado, el puntero apunte a uno u otro objeto representado por el botón. Y los 6 botones representan 6 objetos de clases distintas entre sí.

Esto no se puede hacer equivalente en java?

Seria como tener una objeto abstracto q pudiera ser de cualkiera de los 6 tipos de clases q tengo.

Un saludo.
kerri escribió:porq creo q tendría q modificar todo el codigo q llevo hecho. O lo mismo ahora no te entiendo yo?

te lo voy a comentar de otra forma:

imagina tener un puntero,¿vale?. Pues en una pantalla tengo 6 botones, y yo kiero que en funcion del boton pulsado, el puntero apunte a uno u otro objeto representado por el botón. Y los 6 botones representan 6 objetos de clases distintas entre sí.

Esto no se puede hacer equivalente en java?

Seria como tener una objeto abstracto q pudiera ser de cualkiera de los 6 tipos de clases q tengo.

Un saludo.


No se si es esto lo que estas buscando, pero podrias hacer una clase padre que sea abstracta (con los métodos abstractos clone() y otros que te hagan falta) y las otras clases heredan del padre.

Un saludo.
kerri escribió:porq creo q tendría q modificar todo el codigo q llevo hecho. O lo mismo ahora no te entiendo yo?

te lo voy a comentar de otra forma:

imagina tener un puntero,¿vale?. Pues en una pantalla tengo 6 botones, y yo kiero que en funcion del boton pulsado, el puntero apunte a uno u otro objeto representado por el botón. Y los 6 botones representan 6 objetos de clases distintas entre sí.

Esto no se puede hacer equivalente en java?

Seria como tener una objeto abstracto q pudiera ser de cualkiera de los 6 tipos de clases q tengo.

Un saludo.


Lo que tu quieres hacer no es polimorfismo????
si más o menos, es polimorfismo, lo he probao, pero sigo teniendo problemas.
al final he decidio multiplikar el código, así de esta forma, si tengo alguna particularidad para algún circuito, lo q hago es tratarlo por separado y con independencia de los demás, a pesar de q tenga q hacer el codigo bastante más largo. Pero q con cuidaito y la busqda con sustitucion, no se tarda muxo.

Un saludo.
Hola queria hacer una pregunta no muy tecnica (si no procede decrilo y borro):
¿En 320 h se puede aprender java-j2EE hasta structs? sin saber mucho de programacion (o nada) (lo que es un compilardor, el printf en C y poco mas).
Luego ¿alguno ha trabajado en proyectos de java-j2EE? que tal es?
Bueno, os explico mi problema:
tengo una aplicación (cliente) que crea un socket y le envia un dato (byte [1024]) al servidor mediante udp, desde el servidor, necesito recoger ese dato (que debe ser un numero) multiplicarlo*4 y devolverlo al cliente. La clase del cliente funciona sin problemas, pero desde el servidor, no hay manera de convertir los bytes que me envia el cliente a entero (int) para poder multiplicarlo y devolverlo.
Sabeis como puedo convertir los bytes a int???

Esta es la clase servidor...........

class Servidor {
public static void main(String args[])
{
try {
DatagramSocket s = new DatagramSocket(8080);
byte[] buf = new byte[1024];
DatagramPacket dgram = new DatagramPacket(buf, 1024);
while(true) {
dgram.setData(buf);
s.receive(dgram);
System.out.println(new String(dgram.getData()));
Arrays.fill (buf, (byte)0);
dgram.setData((new String("OK")).getBytes());
s.send(dgram);
}
} catch (Exception e) { e.printStackTrace(); }
}
}


He probado de hacer lo siguiente:
int numero=Integer.parseInt(new String(dgram.getData()));

pero me da una excepcion de NumberFormatException
299 respuestas
1, 2, 3, 4, 5, 6