arrays

jpp140301
08 de Julio del 2006
Necesito ayuda, por favor. Tengo que hacer un array de la clas JLabel y otro de la clase Image. La clase Image al ser abstracta no me deja ser instanciada, y no se como hacerlo. Y la clase JLabel me da el error de NullPointerException. Agradeceria un ejemplo de como hacerlo, gracias
ej:
class Ventana extends JFrame
{
JLabel et[];
Image imagen[];

Ventana()
{
for(int x=0;x<5;x++)
{
et[x] = new JLabel("0");
// la clase Image no me deja ser instanciada
}
}

}

Diego
08 de Julio del 2006
Debería leer algo de programación orientada a objetos, mira en este portal web, que dispone de bastante información. Una clase abstracta no se puede instanciar, pero sí una subclase suya que no sea abstracta, así que haz algo así:
imagenes[0]=new BufferedImage(...

Respecto a los botones, java no inicializa automáticamente los arrays de objetos con el constructor por defecto de dichos objetos, como hacen algunos lenguajes, antes de llamar a botones[x] y utilizar alguna propiedad o método debes asegurarte de que en algún lugar has hecho antes botones[x]=new JButton(... , es decir hay un objeto instanciado.

Espero que te sirva.

lepard
08 de Julio del 2006
Aqui te cuelgo este ejemplo, además quiero comentarte unas cosas:

1.- La clase Image es abstracta y requiere ser iniciada con alguna clase concreta que hereden de ella, como BufferedImaga, Sino quiere usar un tipo concreto tendras qie hcaer una clase concreta apartir de Image, pero creo que java no deja, tampoco estoy muy seguro.

2.- A la hora de inicializar los arrays no puedes añadir objetos a las arrays sin inicializarlos, por eso te da la excepsion de nullpointer. Para inicializar usa:

JLabel jl[]= new JLabel[20]; No instacia ningun objeto sino preparas el array, pero si no sabes el número de componentes que tiene tu array, no es fijo, usa la clase vector, java.util.Vector.




import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class Nimagen {
Image i[]= new Image[20];
JLabel j[]= new JLabel[20];
public Nimagen() {
addJLabel(j);
addImage(i);

}
public void addJLabel(JLabel jl[]){
for(int k=0;k<jl.length;k++){
jl[k]=new JLabel(Integer.toString(k));
}
for(int k=0;k<jl.length;k++){
System.out.println(jl[k].toString());
}
}
public void addImage(Image im[]){
for(int k=0;k<im.length;k++){
im[k]= new BufferedImage(400,300,1);
}
for(int k=0;k<im.length;k++){
System.out.println(im[k].toString());
}
}
public static void main(String args[]){
new Nimagen();
}
}