Tableau dynamique [Résolu]

Messages postés
5
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
28 janvier 2005
- - Dernière réponse : boubacach
Messages postés
5
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
28 janvier 2005
- 25 janv. 2005 à 19:25
Bonjour à tous, je voulais créer un tableau dynamiquement avec ma
variable "nblignes", sans utiliser de Arraylist et Vector parceque
c'est dans le cadre d'un cours et que je ne suis pas censer les
connaitres. Je vous joind mon code. Merci beaucoup de me dire ou cela
cloche (tableau lignes 24) .



import java.awt.* ;

import java.applet.* ;

import java.awt.image.* ;

import java.io.*;

import java.net.*;

import java.awt.event.* ;



public class Visualiseur extends Applet {

protected Panel p1,p11,p12,p2;

protected String [] chaine;

protected String nom1, res;

protected Choice c ;

protected Button ok ;

protected Image image ;

protected int nblignes, n;

protected TextArea txt;

protected Delegue delegue;

protected Adaptateur adapt;



public void init(){



setLayout(new BorderLayout()) ;

chargement();

chaine=new String[nblignes];

p1 = new Panel() ;

p1.setLayout(new BorderLayout());

p11 = new Panel();

p12 = new Panel();

c = new Choice();

for (int i=0;i<nblignes;i++) {

res=chaine[i];

c.add(res);

}

p11.add(c);

p1.add("North",p11) ;

ok = new Button("Admirer") ;

p12.add(ok);

p1.add("South",p12) ;

add("North", p1) ;

p2 = new Panel();

txt = new TextArea(7,40) ;

p2.add(txt) ;

add("South",p2);

delegue=new Delegue(this);

adapt=new Adaptateur(delegue);

ok.addActionListener(adapt);

nom1=chaine[0];

}



public void chargement(){

URL url ;

InputStream stream ;

BufferedReader fichier ;

try {


url = new URL(getDocumentBase(), "listephotos.txt") ;

stream = url.openStream() ;


fichier =new BufferedReader(new
InputStreamReader(stream));

}

catch (IOException e) {

txt.setText("erreur de fichier") ; return ;

}

try {

nblignes = Integer.parseInt(fichier.readLine()) ;

for (int i = 0 ; i < nblignes ; i++)

chaine[i] = fichier.readLine() ;

}

catch (IOException e) {

txt.setText("erreur de transfert") ; return ;

}

}



public void paint(Graphics g) {

image = getImage(getDocumentBase(), nom1+".JPG") ;

g.drawImage(image, 25,80, this) ;

}

}



class Delegue {

protected Visualiseur visu;

Delegue (Visualiseur v) {

visu=v;

}

public void admirer(){

String res1;

res1= visu.c.getSelectedItem();

for(int i=0;i<visu.nblignes;i++){

if (res1.equals(visu.chaine[i])) {

visu.nom1=res1 ;

visu.repaint();

}

}

}

}



class Adaptateur implements ActionListener {

protected Delegue delegue;

public Adaptateur (Delegue d){

delegue = d;

}

public void actionPerformed(ActionEvent e){

delegue.admirer();

}

}
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007
3
Merci
Arf! Oui, mais au vu de la correction....

Donc ce n'est pas apres chargement qu'il faut le faire,

mais dans chargement des que tu connait le nb de ligne

et que tu veux te servir de ton tableau...

maintenant ca doit etre clair pour toi boubacach...

-------------------
dams
-------------------

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dmaillet
Messages postés
357
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
30 mars 2011
0
Merci
kaloway



il faut initialiser nbligne avant de créer le tableau chaine.
Commenter la réponse de kaloway
Messages postés
357
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
30 mars 2011
0
Merci
kaloway



il faut initialiser nbligne avant de créer le tableau chaine.
Commenter la réponse de kaloway
Messages postés
5
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
28 janvier 2005
0
Merci
Merci pour ta réponse, mais, cela ne fonctionne pas. Mais alors
comment expliquer que nblignes est correctement utilisé par la boucle
for qui construit le menu choice ? Modifié comme ça, ça ne marche
toujours pas : (la méthode chargement donnant la valeur à nblignes )

import java.awt.* ;

import java.applet.* ;

import java.awt.image.* ;

import java.io.*;

import java.net.*;

import java.awt.event.* ;



public class Visualiseur extends Applet {

protected Panel p1,p11,p12,p2;

protected String [] chaine;

protected String nom1, res;

protected Choice c ;

protected Button ok ;

protected Image image ;

protected int nblignes, n;

protected TextArea txt;

protected Delegue delegue;

protected Adaptateur adapt;



public void init(){



setLayout(new BorderLayout()) ;

nblignes=0;

chargement();

chaine=new String[nblignes];

p1 = new Panel() ;

p1.setLayout(new BorderLayout());

p11 = new Panel();

p12 = new Panel();

c = new Choice();

for (int i=0;i<nblignes;i++) {

res=chaine[i];

c.add(res);

}

p11.add(c);

p1.add("North",p11) ;

ok = new Button("Admirer") ;

p12.add(ok);

p1.add("South",p12) ;

add("North", p1) ;

p2 = new Panel();

txt = new TextArea(7,40) ;

p2.add(txt) ;

add("South",p2);

delegue=new Delegue(this);

adapt=new Adaptateur(delegue);

ok.addActionListener(adapt);

nom1=chaine[0];

n=0;

}



public void chargement(){

URL url ;

InputStream stream ;

BufferedReader fichier ;

BufferedReader commentaire ;



try {


url = new URL(getDocumentBase(), "listephotos.txt") ;

stream = url.openStream() ;


fichier =new BufferedReader(new
InputStreamReader(stream));

}

catch (IOException e) {

txt.setText("erreur de fichier") ; return ;

}

try {

nblignes = Integer.parseInt(fichier.readLine()) ;

for (int i = 0 ; i < nblignes ; i++)

chaine[i] = fichier.readLine() ;



}

catch (IOException e) {

txt.setText("erreur de transfert") ; return ;

}

}



public void paint(Graphics g) {

image = getImage(getDocumentBase(), nom1+".JPG") ;

g.drawImage(image, 25,80, this) ;

}

}



class Delegue {

protected Visualiseur visu;

Delegue (Visualiseur v) {

visu=v;

}

public void admirer(){

String res1;



res1= visu.c.getSelectedItem();

for(int i=0;i<visu.nblignes;i++){

if (res1.equals(visu.chaine[i])) {


visu.nom1=res1 ;


visu.repaint();



}

}

}

}



class Adaptateur implements ActionListener {

protected Delegue delegue;

public Adaptateur (Delegue d){

delegue = d;

}

public void actionPerformed(ActionEvent e){

delegue.admirer();

}

}
je précise qu'il n'y a pas d'erreur à la compilation mais quand je test, l'applet ne se charge pas.
Commenter la réponse de boubacach
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007
0
Merci
qd tu fais



try {

nblignes = Integer.parseInt(fichier.readLine()) ;

for (int i = 0 ; i < nblignes ; i++)

chaine[i] = fichier.readLine() ;



}



au depart, ton nblignes vaut 0

conclusion, il y a erreur des la premiere ligne lue..

si tu veux que ca marche, fais:




try {

nblignes = Integer.parseInt(fichier.readLine()) ;

chaine = new String[nblignes];

for (int i = 0 ; i < nblignes ; i++)

chaine[i] = fichier.readLine() ;



}



-------------------
dams
-------------------
Commenter la réponse de dmaillet
Messages postés
357
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
30 mars 2011
0
Merci
kaloway

dmaillet confirme ce que j'ai dit. nbligne est initialié par Integer.parseInt(fichier.readLine());
le tableau chaine est crée aprés.
Commenter la réponse de kaloway
Messages postés
5
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
28 janvier 2005
0
Merci
Merci à vous deux pour les réponses qui m'ont permis de corriger mon problème !

Maintenant mon programme fonctionne à 99% !

En effet j'ai un dernier petit détail à régler...

Il s'agit d'un diaporama , avec affichage de commentaire pour chaque photo.

Mais quand un fichier commentaire manque (c'est volontaire) un message
d'erreur s'affiche mais avec le commentaire de la photo précédente en
plus et je voudrai qu'il n'y ai que le message d'erreur qui s'affiche,
alors je vous remercie d'avance pour vos réponses !



import java.awt.* ;

import java.applet.* ;

import java.awt.image.* ;

import java.io.*;

import java.net.*;

import java.awt.event.* ;



public class Visualiseur extends Applet {

protected Panel p1,p11,p12,p2;

protected String [] listephoto, commentaire;

protected String menu, nom;

protected Choice c ;

protected Button ok ;

protected Image image ;

protected int nbphoto, nbcomm;

protected TextArea txt;

protected Delegue delegue;

protected Adaptateur adapt;



public void init(){

setLayout(new BorderLayout()) ;

nom="listephotos";

chargement();

nbphoto=nbcomm;

listephoto=new String[nbphoto];

for (int i = 0 ; i < nbphoto ; i++){

listephoto[i]=commentaire[i];}

p1 = new Panel() ;

p1.setLayout(new BorderLayout());

p11 = new Panel();

p12 = new Panel();

c = new Choice();

for (int i=0;i<nbphoto;i++) {

menu=listephoto[i];

c.add(menu);

}

p11.add(c);

p1.add("North",p11) ;

ok = new Button("Admirer") ;

p12.add(ok);

p1.add("South",p12) ;

add("North", p1) ;

p2 = new Panel();

txt = new TextArea(7,40) ;

p2.add(txt) ;

add("South",p2);

delegue=new Delegue(this);

adapt=new Adaptateur(delegue);

ok.addActionListener(adapt);

nom=listephoto[0];

}



public void chargement(){

URL url ;

InputStream stream ;

BufferedReader fichier ;

try {

url = new URL(getDocumentBase(), nom+".txt") ;

stream = url.openStream() ;


fichier =new BufferedReader(new
InputStreamReader(stream));

}

catch (IOException e) {


txt.setText("erreur de fichier\n") ; return ;
//message qui devrait être sans les commentaires !


}

try {

nbcomm = Integer.parseInt(fichier.readLine()) ;


commentaire=new String[nbcomm];

for (int i = 0 ; i < nbcomm ; i++)


commentaire[i] = fichier.readLine() ;

}

catch (IOException e) {


txt.setText("erreur lecture") ; return ;


}

}



public void paint(Graphics g) {

image = getImage(getDocumentBase(), nom+".JPG") ;

g.drawImage(image, 25,80, this) ;

}

}



class Delegue {

protected Visualiseur visu;

Delegue (Visualiseur v) {

visu=v;

}



public void admirer(){

visu.nom= visu.c.getSelectedItem();

for(int i=0;i<visu.nbphoto;i++){

if (visu.nom.equals(visu.listephoto[i])){

visu.repaint();


}


}

visu.txt.setText("");

visu.chargement();

for (int j=0;j<visu.nbcomm;j++){

visu.txt.setText(visu.txt.getText() + visu.commentaire[j]+"\n") ;


}

}

}



class Adaptateur implements ActionListener {

protected Delegue delegue;

public Adaptateur (Delegue d){

delegue = d;

}

public void actionPerformed(ActionEvent e){

delegue.admirer();

}

}
Commenter la réponse de boubacach