Forum Clubic

Lier le contenu d'une liste d'une classe à une autre classe

Bonjour !

Voilà, je dois terminer un algorithme d’IHM en java, assez complexe. Seulement, voilà : Dans une de mes classes, j’ai conçu une liste de sélections. Et dans une autre, je dois agir EN FONCTION de ce qui est sélectionné dans cette liste. Et… Je bloque. Pas moyen de trouver une réponse potable.

Pour vous aider, je vous transfère le code de la liste :

// CommandeVisu.java

import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;

public class CommandeVisu extends Panel implements ItemListener
{
	private List l;
	private Visu visu;
	
    public CommandeVisu(Visu visu) 
	{
        this.visu=visu;
		
		setLayout(new BorderLayout());
		
		//On crée la liste des choix
		l = new List();
		l.add("CERCLE");
		l.add("COURBE"); 
		l.add("COURBEX2");
		l.add("SURFACE"); 
		l.add("MIROIR");
		
		l.addItemListener(this);
		
		//Pas de sélection multiple possible
		l.setMultipleMode(false);
		l.select(0);
		
		//l.addActionListener(this);
		add(l);
		setVisible(true);
    }
	public void itemStateChanged(ItemEvent e) 
	{
		if (e.getSource()==l) 
		{
			l.getSelectedItems();
		}
	}
}

Et le code de la classe qui doit se servir de cette liste :

import java.awt.*;

public class Visu extends Canvas 
{	
	private TP tp;
	private CommandeVisu cm;
	
    public Visu() 
	{
       setSize(250, 150);
	   this.tp=tp;
	   this.cm=cm;
    }

    public void setValeur(int valCourante) 
	{
	}

    public void paint(Graphics g) 
	{
		g.drawString("Visu", 20, 20);
		
		/*if(cm.getSelectedObjects()=="CERCLE")
		{
			//On dessine un premier cercle de taille maximale
			g.fillOval(50,50,100,100);
				
			//On trace un second cercle dont la taille correspond a la valeur
			g.setColor(tp.panelCouleur.add(pPremierPlan));
			g.drawOval(50, 50,setValeur(valCourante),setValeur(valCourante));
		}*/
		
    }
}

Voilà. La toute dernière partie entre /* et */ est celle que je voudrais obtenir (dessiner deux cercles lorsque “CERCLE” est sélectionné dans la liste.
Si vous pouviez me donner une indication simple et claire, ça m’arrangerait beaucoup.

Merci d’avance ! ^^

Tu as des NullPointerException non ?

Car dans le constructeur de ta classe Visu:
this.tp=tp;
this.cm=cm;

Comme ton constructeur n’a pas d’objet CommandeVisu ou TP en paramètre, tes 2 membres privés sont null. Soit tu ajoutes ces paramètres au constructeur, soit tu les instancies

Après pour ce qui est des actions lors du choix dans la liste, ton code entre /* et */ devrait plutôt se situer dans la méthode itemStateChanged(…) de ta classe CommandeVisu, c’est là que ça se passe quand une sélection est faite

Faux espoir… T_T

Après avoir remanié ma classe en suivant tes conseils, j’obtiens ceci dans la classe CommandeVisu :

public CommandeVisu(Visu visu) 
	{
        this.visu=visu;
		
		setLayout(new BorderLayout());
		
		//On crée la liste des choix
		l = new List();
		l.add("CERCLE");
		l.add("COURBE"); 
		l.add("COURBEX2");
		l.add("SURFACE"); 
		l.add("MIROIR");
		
		l.addItemListener(this);
		
		//Pas de sélection multiple possible
		l.setMultipleMode(false);
		l.select(0);
		
		//l.addActionListener(this);
		add(l);
		setVisible(true);
    }
	
	
	
	public void itemStateChanged(ItemEvent e) 
	{
		if (e.getSource()==l) 
		{
			l.getSelectedItems();
			
			if(e.getItem()==0)
			{
				
				System.out.println("Cercle !");
								
				
			}
			
		}
	}

Pour le coup, ça marche parfaitement : Si je sélectionne “Cercle”, il écrit Cercle.
Mais le problème, c’est pour le lier à la classe Visu elle-même.

Je n’ai pas d’autre choix, car la classe Visu DOIT être celle qui possède la méthode paint() (nécessaire pour dessiner les formes voulues). Et là vient la vraie question : Comment lier le “e.getItem()==0” de CommandeVisu.java au Paint(Graphics g) de Visu.java ?

Réfléchir à transmettre l’objet Graphics à l’instanciation de ta classe CommandeVisu ? (je ne connais pas ta librairie graphique)