Appel getter a partir du GUI [Résolu]

Messages postés
7
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
7 juin 2011
- - Dernière réponse : cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 8 juin 2011 à 10:57
Bonjour, je voudrais essayer de contacter le fonction getTents() qui est dans la classe Tent est qui est heritee de Booking, qui est lui meme dans un ArrayList qui est cree dans bookingManager.

Voici la sub classe Tent:
public class Tent extends Booking{

private int tents;

public Tent(){

}

public Tent(int bookingID, int customerID, java.util.GregorianCalendar startDate, int duration, int tents){
super(bookingID, customerID, startDate, duration);
this.tents = tents;
System.out.println("Tent created");		
}

public String toString(){
return ("Tent" + bookingID + customerID + startDate + duration + tents);
}

public int getTents() {
return tents;
}

public void setTents(int tents) {
this.tents = tents;
}


}


Voici la classe Booking:
\


public class Booking {

int bookingID;
int customerID;
java.util.GregorianCalendar startDate;
int duration;

public Booking(int bookingID, int customerID, java.util.GregorianCalendar startDate, int duration)/* throws bookingIDException, customerIDException, startDateException, durationException */{

System.out.println("Booking reussi");

this.bookingID = bookingID;
this.customerID = customerID;
this.startDate = startDate;
this.duration = duration;

public Booking(){

}

public String toString(){
return(bookingID +" "+ customerID +" "+ startDate +" "+ duration);
}

public int getBookingID() {
return bookingID;
}

public void setBookingID(int bookingID) {
this.bookingID = bookingID;
}

public int getCustomerID() {
return customerID;
}

public void setCustomerID(int customerID) {
this.customerID = customerID;
}

public java.util.GregorianCalendar getStartDate() {
return startDate;
}

public void setStartDate(java.util.GregorianCalendar startDate) {
this.startDate = startDate;
}

public int getDuration() {
return duration;
}

public void setDuration(int duration) {
this.duration = duration;
}

}


Voici la classe BookingManager:
import java.io.*;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.Scanner;
import java.util.StringTokenizer;


public class BookingsManager {

String path;

public ArrayList bookings = new ArrayList();

boolean poweredSite;



//ArrayList bookingList = new ArrayList();


public BookingsManager(String path) throws FileNotFoundException, ParseException {

int bookingID, customerID, duration, tents, occupancy;

Scanner scanner = new Scanner(new File(path));

while (scanner.hasNext()) { 

String ligne = scanner.nextLine();

System.out.println(ligne);

StringTokenizer st = new StringTokenizer(ligne, "|");

while(st.hasMoreTokens()){

String bookingType = st.nextToken();

String SbookingID = st.nextToken();
bookingID = Integer.parseInt(SbookingID); 

String ScustomerID = st.nextToken();
customerID = Integer.parseInt(ScustomerID);

String SstartDate = st.nextToken();
String []lineStartDate = SstartDate.split( "/");
int startday= Integer.parseInt(lineStartDate[0]);
int startmonth= Integer.parseInt(lineStartDate[1]);
int startyear= Integer.parseInt(lineStartDate[2]);
java.util.GregorianCalendar startDate = new GregorianCalendar(startyear,startmonth,startday);

String Sduration = st.nextToken();
duration = Integer.parseInt(Sduration);

String SpoweredSite = st.nextToken();
        poweredSite = Boolean.parseBoolean(SpoweredSite);

String Stent = st.nextToken();
tents = Integer.parseInt(Stent);

String Soccupancy = st.nextToken();
occupancy = Integer.parseInt(Soccupancy);

System.out.println(bookingType +" "+ bookingID +" "+ customerID +" "+ startDate.get(startDate.DAY_OF_MONTH)+" "+startDate.get(startDate.MONTH)+" "+ startDate.get(startDate.YEAR) +" "+ duration +" "+ poweredSite +" "+ tents +" "+ occupancy);

if (bookingType.equals("Tent")){
bookings.add(new Tent(bookingID, customerID, startDate, duration, tents));
}
if(bookingType.equals("Caravan")){
bookings.add(new Caravan(bookingID, customerID, startDate, duration, poweredSite));
}
if (bookingType.equals("Cabin")){
bookings.add(new Cabin(bookingID, customerID, startDate, duration, occupancy));
}

}//End While
}//End While
//System.out.println(bookingList);
}

public void addBookingManager(Booking[] booking[]){

}

public void updateBooking (Booking[] booking[]){

}

public void deleteBooking (){

}

public void toFile(){
//toString
}

public Booking findBooking(int bookingID){
int results = 0;
int i = 0;
for(i=0; i<bookings.size(); i++){
if(bookings.get(i).getBookingID()==bookingID){
results=i;
}
}
return bookings.get(results);
}

public int totalBookings(Booking type){
int compteur=0;
for(int i=0; i<bookings.size(); i++){
if (type.getClass().equals(bookings.get(i).getClass())){
compteur++;
}
if (type.getClass().equals(new Booking().getClass())){
compteur = bookings.size();
}
}
return compteur;
}

public int totalBookings(Booking type, java.util.GregorianCalendar date){
int compteur=0;
for(int i=0; i<bookings.size(); i++){
if (type.getClass().equals(bookings.get(i).getClass()) ){
compteur++;
}
if (type.getClass().equals(new Booking().getClass()) ){
compteur = bookings.size();
}
}
return compteur;
}


}


J arrive a recuperer mes variables de Booking en fesant ex:

bookingManager.bookings.get(i).getCustomerID()

Mais pour recuperer la variable dans Tent je n ai aucune idee.

Merci d avance.
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
3
Merci
Ha, je n'avais pas compris.

Je vais te donner une méthode, ca ne va pas te faire rêver, ce n'est pas très élégant, mais ca marche, c'est un cast

Booking b = bookingManager.bookings.get(i);
if(b instanceof Tent){
     ((Tent)b)).getTents();
}

Dire « Merci » 3

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

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

Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
Étant donné que Tent étend la classe Booking, elle possède toutes les méthodes de cette classe.

Donc, dans la classe Tent, tu peux faire directement un getCustomerID(). Les variables que tu cherches à récupérées sont initialisées lorsque tu écris
super(bookingID, customerID, startDate, duration);
Commenter la réponse de cs_Julien39
Messages postés
7
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
7 juin 2011
0
Merci
Merci pour ta reponse.

J arrive a recuperer CustomerID mais je narrive pas a recuperer la fonction getTents() a partir du GUI.
Il me faudrait une ligne de code pour appeler la fonction qui est dans Tent et pas dans booking, car c est une variable pour la classe Tent.

bookingManager.bookings.get(i).getTents() ;

Cela ne marche pas car getTents n'est pas reconnu dans Booking mais uniquement dans Tent.
Commenter la réponse de poupou014
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
Il faudrait peut être trouver une méthode plus appropriée en utilisant le polymorphisme, mais je ne peux pas t'en dire plus, je ne sais pas ce que tu veux faire
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
Peut être faudrait il passer ton attribut bookings dans BookingsManager en private et faire un getter dessus. De plus, tu pourrais le déclarer en List au lieu de ArrayList

Mais, je chipote un peu...
Commenter la réponse de cs_Julien39
Messages postés
7
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
7 juin 2011
0
Merci
Merci beaucoup Julien, j'ai repris ton bout de code et cela marche tres bien. Je l ai modifiee pour qu il soit plus clair.

((Tent)bookingManager.bookings.get(i)).getTents();

Je ne connaissais pas cette notion de Cast etant debutant.

Thanks again.
Commenter la réponse de poupou014
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
En général, on essaye d'éviter les cast parce qu'ils sont porteurs d'erreurs, surtout si ton code est amené à évoluer.

Ils peuvent lever une exception ClassCastException si le cast est impossible (si l'objet Booking n'est pas une instance de Tent)
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
Et pourquoi n'utilises tu pas une ArrayList<Tent> ?
Commenter la réponse de cs_Julien39
Messages postés
7
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
7 juin 2011
0
Merci
Je n'utilise pas de ArrayList<Tent> car Tent est une subclass de Booking mais il y a aussi Cabin ou Caravan.

Pour la gestion de l'erreur que tu me parle plus haut, j'ai fait un condition if avant pour savoir quelle est la classe (Tent, Caravan ou Cabin).

if(bookingManager.bookings.get(i).getClass().equals(Tent.class)){...}
Commenter la réponse de poupou014
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
tu peux utiliser instanceof comme je l'ai fait dans l'exemple plus haut, c'est fait pour ca.

Ce n'est pas terrible comme programmation objet (mais pour un débutant, ca passe). Tu as des problèmes de conception.

Si tu m'expliques ce que tu veux faire avec ces différentes classes, je te donne une solution plus correcte. Si ca te convient de faire comme ca pour l'instant, ca me va aussi.

Bon courage
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
Si tu as trouvé ce que tu voulais peux tu cliquer sur réponse acceptée que les autres personnes ne perdent pas de temps ?
Commenter la réponse de cs_Julien39