Classes constructeurs et ArrayList

Résolu/Fermé
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 - Modifié par elkadiri.wd le 7/08/2013 à 02:29
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 - 24 août 2013 à 12:58
Bonjour,

j'ai deux classes: Reservation et Chambre. une réservation peut contenir plusieurs chambres. pour cela on a dans la classe Reservation : private ArrayList<Chambre>. dans la base de données j'ai la table reservation et la table chambre. sachant qu'on a un constructeur dans reservation qui contient des parametre de reservation en plus un parametre de type chambre, comment faire pour ajouter les données de la reservation dans la table reservation et les données des chambre dans la table chambre? merci

C'est en forgeant qu'on devient forgeron.

23 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
7 août 2013 à 09:48
Bonjour,

Niveau base de données, avec quoi travailles-tu ? Est-ce que tu as déjà les configurations requises pour t'y connecter dans ton programme ? Utilises-tu un ORM tel qu'hibernate ou autre ?

PS: Edit le titre de ta question car il n'est à priori pas en rapport avec ton problème. Merci.
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
7 août 2013 à 21:05
merci, non je n'utilise pas ORM je travaille directement sur la base de données. il ne me donne pas la main pour modifier
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
7 août 2013 à 23:21
Qu'utilises-tu pour te connecter à ta base de données depuis ton programme ? A moins que ce soit là ta question: comment se connecter à ta base ? Si c'est le cas, quel type de base de données il s'agit ?
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
8 août 2013 à 01:49
j'utilise le driver JDBC et le fichier JAR mysql connector java. et le type mysql
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 août 2013 à 10:44
Est-ce que tu connais déjà JDBC, je veux dire pour l'utiliser ?
Si ce n'est pas le cas je te conseille de lire ce tutorial (par exemple) afin d'en comprendre les mécanismes.
https://jguillard.developpez.com/JDBC/4.php

Ensuite libre à toi d'appliquer ce que tu y auras appris selon tes besoins.

Si tu connais déjà, j'imagine que tu as déjà un peu de code non ? Peux-tu nous montrer ce code ici pour voir où tu en es ?
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
8 août 2013 à 22:50
Voila un code que j'ai déjà. mais je n'utilise pas ce qu'on appelle ORM.

package hotelClasses;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DataClass {
		
	private String driver;
	private String url;
	private String user;
	private String password;
	public Statement st;
	public ResultSet rs;
	Connection connexion;
	
	public DataClass(){
		this.driver="com.mysql.jdbc.Driver";
		this.url="jdbc:mysql://localhost:3306/basehotel";
		this.user="root";
		this.password="";
		
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			connexion=DriverManager.getConnection(url,user,password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void reqUpdate(String req){
		
		try {
			st=connexion.createStatement();
			st.executeUpdate(req);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}			
		
	}
	
	public ResultSet reqSelect(String req){
		try {
			//st=connexion.createStatement();
			st = connexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
		} catch (SQLException e) { }
		
		try {
			rs=st.executeQuery(req);
		} catch (SQLException e) { }
			
		return rs;	
	
	}
	
}

0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
9 août 2013 à 11:48
- Est-ce que tu as déjà créé ta base de données ainsi que tes tables ?
-> Si oui, quelle est leur structure ?
- Est-ce que tu as déjà créé tes classes d'object correspondant à tes tables (réservation, chambre, etc.)
-> Si oui, peux tu poster le code ?

En gros, ta classe DataClass te permet:
- Lors de la création d'une instance, cela créé une connexion à la base de donnée
- La classe présente une méthode pour faire du select, et une méthode pour faire un update.

Ce qu'il te manque c'est d'utiliser cette classe pour effectuer les requêtes de sélection ou d'update sur tes différentes tables de ta base de données.

As-tu d'autres partie de code, typiquement pour l'affichage, etc. que tu peux poster également ?
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
10 août 2013 à 11:53
pour la table client j'ai les colonnes:

#cniClient; nom; prenom; sexe; adresse; telephone; pays; email; dateInscription

pour la table reservation j'ai les colonnes:

#numReservation; dateReservation; dateArrivee; dateSortie; nombreNuit; nombreChambre; cniClient

pour la table chambre j'ai les colonnes:

#idChambre; typeChambre; occupee(boolean); etage;numReservation;prix

et j'ai déjà les classes de ces table, voilà le code de la classe reservation et la classe chambre:

Reservation :

package hotelClasses;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Reservation {

private int numReservation;
private Date dateReservation;
private Date dateArrivee;
private Date dateSortie;
private int nbrNuits;
private int nbrChambre;
private String cniClient;
private Chambre chbre;

DataClass dc=new DataClass();


public int getNumReservation() {
	return numReservation;
}
public void setNumReservation(int numReservation) {
	this.numReservation = numReservation;
}
public Date getDateReservation() {
	return dateReservation;
}
public void setDateReservation(Date dateReservation) {
	this.dateReservation = dateReservation;
}
public Date getDateArrivee() {
	return dateArrivee;
}
public void setDateArrivee(Date dateArrivee) {
	this.dateArrivee = dateArrivee;
}
public Date getDateSortie() {
	return dateSortie;
}
public void setDateSortie(Date dateSortie) {
	this.dateSortie = dateSortie;
}
public int getNbrNuits() {
	return nbrNuits;
}
public void setNbrNuits(int nbrNuits) {
	this.nbrNuits = nbrNuits;
}
public int getNbrChambre() {
	return nbrChambre;
}
public void setNbrChambre(int nombreChambre) {
	this.nbrChambre = nombreChambre;
}
public String getCniClient() {
	return cniClient;
}
public void setCniClient(String cniClient) {
	this.cniClient = cniClient;
}

public Chambre getChbre() {
	return chbre;
}
public void setChbre(Chambre chbre) {
	this.chbre = chbre;
}

public Reservation() {
	super();

}
public Reservation(Date dateReservation, Date dateArrivee,
		Date dateSortie, int nbrNuits,int nbrChambre,String cniClient) {
	super();
//	this.numReservation = numRes++;
	this.dateReservation = dateReservation;
	this.dateArrivee = dateArrivee;
	this.dateSortie = dateSortie;
	this.nbrNuits = nbrNuits;
	this.nbrChambre=nbrChambre;
	this.cniClient=cniClient;
}

public void ajouterReservation(Date dateReservation,Date dateArrivee,Date dateSortie,int nbrNuits,int nbrChambre,String cniClient){
	SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
	
	dc.reqUpdate("insert into 'reservation'('dateReservation','dateArrivee','dateSortie','nbrNuits','nbrchambre','cniClient') " +
			"values ('"+sdf.format(dateReservation)+"','"+sdf.format(dateArrivee)+"','"+sdf.format(dateSortie)+"','"+nbrNuits+"','"+nbrChambre+"','"+cniClient+"')");
	
}

public int dernierNumRes() throws SQLException{
	int numRes=0;
	dc.reqSelect("select numReservation from reservation order by numReservation desc limit 1");
	dc.rs.first();
	if(dc.rs.getRow()>0){
			 numRes=dc.rs.getInt("numReservation");
			 }
	
	return numRes;
}

public void modifierReservation(int numReservation,Date dateReservation,Date dateArrivee,Date dateSortie,int nbrNuits,int nbrChambre,String cniClient) throws SQLException{
String msg;
dc.reqSelect("select * from reservation where numReservation='"+numReservation+"'");
dc.rs.first();
if(dc.rs.getRow()>0){
  dc.rs.updateDate("dateReservation", (java.sql.Date) dateReservation);
  dc.rs.updateDate("dateArrivee", (java.sql.Date) dateArrivee);
  dc.rs.updateDate("dateSortie", (java.sql.Date) dateSortie);
  dc.rs.updateInt("nbrNuits", nbrNuits);
  dc.rs.updateInt("nbrChambre", nbrChambre);
  dc.rs.updateString("cniClient", cniClient);
   
  dc.rs.updateRow();
  msg="La modification a été réalisée avec succès";
}
else{
	   msg="Cette reservation n'existe pas";	  
}

JFrame msgDial=new JFrame();
JOptionPane.showMessageDialog(msgDial, msg);

  dc.rs.close();
  dc.st.close();

}


Chambre :

package hotelClasses;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Chambre {
	private int idChambre;
	private String typeChambre;
	private String disponibilite;
	private int etage;
	private double prix;
	private int numReservation;

	
	DataClass dc=new DataClass();
	public String msg;
	
	public String typeCh;
	public String disp;
	public int etag;
	public double pr;
	public int numRes;
	
	public int getIdChambre() {
		return idChambre;
	}
	public void setIdChambre(int idChambre) {
		this.idChambre = idChambre;
	}
	public String getTypeChambre() {
		return typeChambre;
	}
	public void setTypeChambre(String typeChambre) {
		this.typeChambre = typeChambre;
	}
	public String isDisponibilite() {
		return disponibilite;
	}
	public void setDisponibilite(String disponibilite) {
		this.disponibilite = disponibilite;
	}
	public int getEtage() {
		return etage;
	}
	public void setEtage(int etage) {
		this.etage = etage;
	}
	public double getPrix() {
		return prix;
	}
	public void setPrix(double prix) {
		this.prix = prix;
	}

	public int getNumReservation() {
		return numReservation;
	}
	public void setNumReservation(int numReservation) {
		this.numReservation = numReservation;
	}
	
	
	public Chambre() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public Chambre(int idChambre, String typeChambre, String disponibilite,
			int etage,double prix, int numReservation) {
		super();
		this.idChambre = idChambre;
		this.typeChambre = typeChambre;
		this.disponibilite = disponibilite;
		this.etage = etage;
		this.prix=prix;
		this.numReservation = numReservation;
	}
	
	public void ajouterChambre(int idChambre,String typeChambre,int etage,double prix){
			
		dc.reqUpdate("insert into 'chambre'('idChambre','typeChambre','etage','prix') " +
				"values ('"+idChambre+"','"+typeChambre+"','"+etage+"','"+prix+"')");
	}
	
	public void modifierChambre(int idChambre,String typeChambre,int etage,double prix) throws SQLException{

		dc.reqSelect("select * from chambre where idChambre='"+idChambre+"'");
		dc.rs.first();
		if(dc.rs.getRow()>0){
		  dc.rs.updateInt("idChambre", idChambre);
		  dc.rs.updateString("typeChambre", typeChambre);
		  dc.rs.updateInt("etage", etage);
		  dc.rs.updateDouble("prix", prix);
				 
		  dc.rs.updateRow();
		  msg="La modification a été réalisée avec succès";
		}
		else{
			   msg="Cette chambre n'existe pas";	  
		}

		JFrame msgDial=new JFrame();
		JOptionPane.showMessageDialog(msgDial, msg);

		  dc.rs.close();
		  dc.st.close();

		}
	
	public void supprimerChambre(int idChambre){
		dc.reqUpdate("delete from 'chambre' where idChambre='"+idChambre+"'");
	}
	
	public void rechercherChambre(int idChambre) throws SQLException{
		dc.reqSelect("select * from chambre where idChambre='"+idChambre+"'");
		dc.rs.first();
		if(dc.rs.getRow()>0){
				 typeCh=dc.rs.getString("typeChambre");
				 etag=dc.rs.getInt("etage");
				 pr = dc.rs.getDouble("prix");
				 }
		else{
			msg="Cette chambre n'existe pas";
			JFrame msgDial=new JFrame();
			JOptionPane.showMessageDialog(msgDial, msg);		
		}
	}
	
}

0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 12/08/2013 à 11:32
Re,

Il y a plusieurs choses qui ne vont pas dans ton code existant.

La première et surtout la plus grave puisque erreur de conception: toujours dissocier ton code, ici la partie dite 'model' et la partie 'business'.

Tu as deux classes, réservation et chambre qui sont en faite des classes de model (typiquement qui ne contiennent / reflètent que les données des tables, et éventuellement quelques méthodes de formatting).
Il faut que tu extrais tous le code relatif à ta partie 'business' sous forme d'une classe 'service'.

Tu devrais donc avoir deux autres classes qui sont chargée de manipulée tes classes model chambre et réservation, avec notamment les méthodes update, create, delete, find, etc.

La seconde erreur est une erreur de programmation: actuellement dans tes model tu as une propriété DataClass:

DataClass dc=new DataClass();


Cela signifie que quand tu instancie un objet Réservation ou Chambre, tu ouvre une connexion sur ta base de données ! C'est une erreur grave dans la mesure ou tu vas très vite saturer ta base en ouvrant des connnexions par objet sans pour autant les fermer obligatoirement.
Et de toute façon, l'ouverture / fermeture de connexion sur ta base n'a rien a faire ici, mais dois se trouver dans le code 'business', tes services donc. Tu ouvres / fermes une connexoin quand tu dois effectuer une requête, à chaque fois dans un premier temps, ensuite tu pourras te documenter pour gérer un pool de connexion, éventuellement si ton driver ne le fait pas déjà.

Dernière remarque, dans tes méthodes 'business' d'update & co, tu utilises ton objet dc pour effectuer tes requêtes puis à la fin tu fermes la connexion sur cette objet. Résultat: si tu tente de refaire un update ou une autre méthode qui utilise la connexion, tu vas avoir un nullPointerException ou équivalent parce que ton objet connexion est null puisque fermé.
Dans ton objet dc, plutot que d'ouvrir la connexion dans le constructeur, tu devrais en faire une méthode, de manière à pouvoir ouvrir / utiliser / fermer une connexion plusieurs fois avec un seul objet, ça te permettra de ne pas devoir ré-instancier un objet à chaque fois.


Donc effectue déjà ces changements, ensuite reposte ton code propre.



~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
12 août 2013 à 15:23
merci de vos remarques mais j'ai quelques ambiguïté:
1- est ce que tu parles du MVC, si oui d'après ma connaissance la partie 'model' est la partie 'business'(ou métier)??
si j'ai compris en en prenant en considération votre explication, d'après mon code, les classes 'model' doivent être celles que je vous ai envoyé (reservation,chambre) (en enlevant les méthodes ajouter,supprimer..).
et les classes 'business' devant avoir ces méthodes sont celles qui représentent les IHM, en voilà les codes:

GestionReservation:

package hotelIHM;

import hotelClasses.DataClass;

public class GestionReservation extends JFrame {
	
	Reservation res=new Reservation();
	DataClass dc=new DataClass();
	JButton btnAjouter;
	JButton btnNouveau;
	private JPanel contentPane;
	private JTextField numResText;
	private JTextField dateResText;
	private JTextField dateArrText;
	private JTextField dateSorText;
	private JTextField nbrNuitsText;
	public JComboBox  cniCombo;
	private JTextField nbrChambreText;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GestionReservation frame = new GestionReservation();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public GestionReservation() {
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowOpened(WindowEvent arg0) {
				String num;
				try {
					num = String.valueOf(res.dernierNumRes()+1);
					numResText.setText(num);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				
				dc.reqSelect("select cniClient from reservation");
					try {
						dc.rs.last();
						int rowCount = dc.rs.getRow();
						String[] data = new String[rowCount];
						
						dc.rs.beforeFirst();
						int i=1;
						while(dc.rs.next()){
							
								data[i-1] = dc.rs.getString("cniClient");
								cniCombo.addItem(data[i-1]);
								i++; 
						
						}
						
						dc.rs.close();
						dc.st.close();						
					
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
			}
		});
		setTitle("Gestion r\u00E9servations");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 613, 466);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		btnNouveau = new JButton("Nouveau");
		btnNouveau.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {				
				btnAjouter.setEnabled(true);
				//btnNouveau.setEnabled(false);
				btnAjouter.setEnabled(true);
				String num;
				try {
					num = String.valueOf(res.dernierNumRes()+1);
					numResText.setText(num);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				dateResText.setText(null);
				dateArrText.setText(null);
				dateSorText.setText(null);
				nbrNuitsText.setText(null);
			}
		});
		btnNouveau.setBackground(SystemColor.controlHighlight);
		btnNouveau.setBounds(74, 278, 97, 35);
		contentPane.add(btnNouveau);
		
		btnAjouter = new JButton("Ajouter");
		
		
		btnAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
				try {
					btnAjouter.setEnabled(false);
					res.ajouterReservation(sdf.parse(dateResText.getText()), sdf.parse(dateArrText.getText()), sdf.parse(dateSorText.getText()),Integer.parseInt(nbrNuitsText.getText()),Integer.parseInt(nbrChambreText.getText()), (String)cniCombo.getSelectedItem());
				} catch (NumberFormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				JFrame msgDial=new JFrame();
				JOptionPane.showMessageDialog(msgDial, "Ajout effectué avec succès ");
			}
		});
		btnAjouter.setBackground(SystemColor.controlHighlight);
		btnAjouter.setBounds(175, 278, 97, 35);
		contentPane.add(btnAjouter);
		
		JButton btnRechercher = new JButton("Liste de reservation du client");
		btnRechercher.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				DataClass dc=new DataClass();
				dc.reqSelect("select * from reservation where cniClient='"+(String)cniCombo.getSelectedItem()+"'");
				try {
					ResultSetMetaData meta=dc.rs.getMetaData();
					Object[] column = new Object[meta.getColumnCount()];
					
					for(int i=1;i<=meta.getColumnCount();i++){
						column[i-1]=meta.getColumnName(i);
					}
					
					dc.rs.last();
					int rowCount = dc.rs.getRow();
					Object[][] data = new Object[rowCount][meta.getColumnCount()];
				
					dc.rs.beforeFirst();
					int j = 1;
					
					while(dc.rs.next()){
						for(int i = 1 ; i <= meta.getColumnCount(); i++){
							data[j-1][i-1] = dc.rs.getObject(i);
						}								
						j++;				
					}
					
					dc.rs.close();
					dc.st.close();
					contentPane.setLayout(new BorderLayout(0, 0));
					
					ListeReservation lr=new ListeReservation();
					 lr.setVisible(true);
					JTable table = new JTable(data,column);
					table.setBounds(0, 0, 434, 262);
					
					JScrollPane scrollPane = new JScrollPane(table);
					//contentPane.add(scrollPane);
				    lr.contentPane.add(scrollPane);
				   
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});
		btnRechercher.setBackground(SystemColor.controlHighlight);
		btnRechercher.setBounds(282, 278, 171, 35);
		contentPane.add(btnRechercher);
		
		JButton btnListeReservation = new JButton("Liste Reservations");
		btnListeReservation.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ListeReservation lr=new ListeReservation();
				lr.setVisible(true);
			}
		});
		btnListeReservation.setBackground(SystemColor.controlHighlight);
		btnListeReservation.setBounds(282, 332, 171, 32);
		contentPane.add(btnListeReservation);
		
		JButton btnModifier = new JButton("Modifier");
		btnModifier.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
				try {
					res.modifierReservation(Integer.parseInt(numResText.getText()), sdf.parse(dateResText.getText()), sdf.parse(dateArrText.getText()), sdf.parse(dateSorText.getText()), Integer.parseInt(nbrNuitsText.getText()),Integer.parseInt(nbrChambreText.getText()), (String)cniCombo.getSelectedItem());
				} catch (NumberFormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		btnModifier.setBackground(SystemColor.controlHighlight);
		btnModifier.setBounds(175, 332, 97, 32);
		contentPane.add(btnModifier);
		
		JButton btnSupprimer = new JButton("Supprimer");
		btnSupprimer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFrame suppFrame=new JFrame();
				String txt=JOptionPane.showInputDialog (suppFrame, "Entrer le numéro de réservation") ;				
				
				res.supprimerReservation(Integer.parseInt(txt));					
				
			}
		});
		btnSupprimer.setBackground(SystemColor.controlHighlight);
		btnSupprimer.setBounds(74, 332, 97, 32);
		contentPane.add(btnSupprimer);
		
		JPanel panel = new JPanel();
		panel.setBounds(10, 0, 577, 243);
		contentPane.add(panel);
		panel.setLayout(null);
		
		JLabel label = new JLabel("CNI client         :");
		label.setBounds(326, 33, 88, 14);
		panel.add(label);
		
		numResText = new JTextField();
		numResText.setColumns(10);
		numResText.setBounds(197, 33, 119, 20);
		panel.add(numResText);
		
		dateResText = new JTextField();
		dateResText.setColumns(10);
		dateResText.setBounds(197, 72, 119, 20);
		panel.add(dateResText);
		
		dateArrText = new JTextField();
		dateArrText.setColumns(10);
		dateArrText.setBounds(197, 110, 119, 20);
		panel.add(dateArrText);
		
		dateSorText = new JTextField();
		dateSorText.setColumns(10);
		dateSorText.setBounds(197, 143, 119, 20);
		panel.add(dateSorText);
		
		nbrNuitsText = new JTextField();
		nbrNuitsText.setColumns(10);
		nbrNuitsText.setBounds(197, 181, 119, 20);
		panel.add(nbrNuitsText);
		
		JLabel label_1 = new JLabel("Nombre de nuits                       :");
		label_1.setBounds(10, 184, 159, 14);
		panel.add(label_1);
		
		JLabel label_2 = new JLabel("Date sortie client                      :");
		label_2.setBounds(10, 141, 159, 14);
		panel.add(label_2);
		
		JLabel label_3 = new JLabel("Date arriv\u00E9e client                    :");
		label_3.setBounds(10, 113, 159, 14);
		panel.add(label_3);
		
		JLabel label_4 = new JLabel("Date de r\u00E9servation                 :");
		label_4.setBounds(10, 75, 159, 14);
		panel.add(label_4);
		
		JLabel label_5 = new JLabel("Numero de reservation            :");
		label_5.setBounds(10, 36, 159, 14);
		panel.add(label_5);
		
		cniCombo = new JComboBox();
		cniCombo.setBounds(420, 30, 102, 20);
		panel.add(cniCombo);
		
		JLabel lblNombreDeChambres = new JLabel("Nombre de chambres               :");
		lblNombreDeChambres.setBounds(10, 215, 159, 14);
		panel.add(lblNombreDeChambres);
		
		nbrChambreText = new JTextField();
		nbrChambreText.setBounds(197, 212, 119, 20);
		panel.add(nbrChambreText);
		nbrChambreText.setColumns(10);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBounds(10, 254, 577, 163);
		contentPane.add(panel_1);
		panel_1.setLayout(null);
		
		JButton button = new JButton("Afficher les chambres disponibles");
		button.setBounds(178, 118, 196, 34);
		panel_1.add(button);
	}
}


Chambre

package hotelIHM;

import hotelClasses.Chambre;

public class GestionChambre extends JFrame {

	private JPanel contentPane;
	private JTextField numChText;
	private JTextField typeChText;
	private JComboBox etageCombo;
	private JRadioButton rdbtnOui;
	private JRadioButton rdbtnNon;
	DataClass dc=new DataClass();
	Chambre ch=new Chambre();
	private JTextField prixText;
	private JTextField numResText;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GestionChambre frame = new GestionChambre();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public GestionChambre() {
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowOpened(WindowEvent arg0) {
				
			}
		});
		setTitle("Gestion des chambres");
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 601, 417);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBounds(10, 21, 565, 250);
		contentPane.add(panel);
		
		numChText = new JTextField();
		numChText.setColumns(10);
		numChText.setBounds(197, 33, 119, 20);
		panel.add(numChText);
		
		typeChText = new JTextField();
		typeChText.setColumns(10);
		typeChText.setBounds(197, 77, 119, 20);
		panel.add(typeChText);
		
		JLabel lblEtage = new JLabel("Etage                                        :");
		lblEtage.setBounds(10, 149, 159, 14);
		panel.add(lblEtage);
		
		JLabel lblTypeDeChambre = new JLabel("Type de chambre                     :");
		lblTypeDeChambre.setBounds(10, 80, 159, 14);
		panel.add(lblTypeDeChambre);
		
		JLabel lblNumeroDeChambre = new JLabel("Num\u00E9ro de chambre                 :");
		lblNumeroDeChambre.setBounds(10, 36, 159, 14);
		panel.add(lblNumeroDeChambre);
		
		etageCombo = new JComboBox();
		String[] et={"1","2","3","4","5","6","7","8","9","10","11"};
		etageCombo=new JComboBox(et);
		etageCombo.setBounds(197, 146, 52, 20);	
		panel.add(etageCombo);
		
		prixText = new JTextField();
		prixText.setColumns(10);
		prixText.setBounds(197, 177, 119, 20);
		panel.add(prixText);
		
		JLabel lblPrix = new JLabel("Prix                                           :");
		lblPrix.setBounds(10, 180, 159, 14);
		panel.add(lblPrix);
		
		JLabel lblOccupee = new JLabel("Occup\u00E9e                                   :");
		lblOccupee.setBounds(10, 116, 159, 14);
		panel.add(lblOccupee);
		
		rdbtnOui = new JRadioButton("Oui");
		rdbtnOui.setBounds(197, 116, 52, 23);
		rdbtnOui.setEnabled(false);
		panel.add(rdbtnOui);
		
		rdbtnNon = new JRadioButton("Non");
		rdbtnNon.setBounds(264, 116, 109, 23);
		rdbtnNon.setEnabled(false);
		rdbtnNon.setSelected(true);
		panel.add(rdbtnNon);
		
		JLabel lblNumroDeRservation = new JLabel("Num\u00E9ro de r\u00E9servation             :");
		lblNumroDeRservation.setBounds(10, 211, 159, 14);
		panel.add(lblNumroDeRservation);
		
		numResText = new JTextField();
		numResText.setBounds(197, 208, 57, 20);
		numResText.setEnabled(false);
		panel.add(numResText);
		numResText.setColumns(10);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBounds(10, 272, 565, 96);
		contentPane.add(panel_1);
		panel_1.setLayout(null);
		
		JButton btnNouveau = new JButton("Nouveau");
		btnNouveau.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				numChText.setText(null);
				typeChText.setText(null);
						
			}
		});
		btnNouveau.setBounds(78, 11, 114, 32);
		panel_1.add(btnNouveau);
		
		JButton btnAjouter = new JButton("Ajouter");
		btnAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				JFrame msgDial=new JFrame();
				boolean occup=false;
				if(rdbtnNon.isSelected()==true){
					
					occup=false;
				}
								
				if(numChText.getText().equals("") || typeChText.getText().equals("") || (rdbtnOui.isSelected()==false && rdbtnNon.isSelected()==false) || prixText.getText().equals("")){
				       JOptionPane.showMessageDialog(msgDial, "Un ou plusieurs champs ne sont pas remplis","Message d'avertissement",JOptionPane.ERROR_MESSAGE);
						}					
						else{
				ch.ajouterChambre(Integer.parseInt(numChText.getText()), typeChText.getText(),occup,Integer.parseInt((String)etageCombo.getSelectedItem()),Double.parseDouble(prixText.getText()));
				JOptionPane.showMessageDialog(msgDial, "Ajout effectué avec succès ");
						}
				}
		});
		btnAjouter.setBounds(220, 11, 114, 32);
		panel_1.add(btnAjouter);
		
		JButton btnModifier = new JButton("Modifier");
		btnModifier.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				try {
					ch.modifierChambre(Integer.parseInt(numChText.getText()), typeChText.getText(), Integer.parseInt((String)etageCombo.getSelectedItem()),Double.parseDouble(prixText.getText()));
				} catch (NumberFormatException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		btnModifier.setBounds(365, 11, 114, 32);
		panel_1.add(btnModifier);
		
		JButton btnSupprimer = new JButton("Supprimer");
		btnSupprimer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ch.supprimerChambre(Integer.parseInt(numChText.getText()));
			}
		});
		btnSupprimer.setBounds(78, 54, 114, 32);
		panel_1.add(btnSupprimer);
		
		JButton btnRechercher = new JButton("Rechercher");
		btnRechercher.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					ch.rechercherChambre(Integer.parseInt(numChText.getText()));
					if(ch.disp==true){
						rdbtnOui.setSelected(true);
						rdbtnNon.setSelected(false);
					}
					else if(ch.disp==false){
						rdbtnNon.setSelected(true);
						rdbtnOui.setSelected(false);
					}
					
					typeChText.setText(ch.typeCh);
					etageCombo.setSelectedItem(ch.etag);
					numResText.setText(ch.numRes);
					
				} catch (NumberFormatException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		btnRechercher.setBounds(220, 54, 114, 32);
		panel_1.add(btnRechercher);
		
		JButton btnAfficherTousLes = new JButton("Afficher tous les chambres");
		btnAfficherTousLes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ListeChambre lc=new ListeChambre();
				lc.setVisible(true);
			}
		});
		btnAfficherTousLes.setBounds(365, 54, 177, 32);
		panel_1.add(btnAfficherTousLes);
	}
}



pour le 2eme et troisieme erreur

est ce que je dois faire l'ouverture et la fermeture de la connexion dans la méthode de connexion.

une autre question: "model (typiquement qui ne contiennent / reflètent que les données des tables, et éventuellement quelques méthodes de formatting). " qu'est ce ça veut dire méthodes de formatting?

merci de me répondre dans un bref délai car je doit présenter mon projet dans 25 jours et je n'ai même pas préparé mon mémoire :(
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 13/08/2013 à 11:04
Salut,

> Les classes dites "model" sont les classes qui représente tes données, et donc généralement les classes qui représente les différentes tables ou relations de ta base de données.

> Le code business doit être séparé du code IHM. En gros, c'est comme si tu avais dans ton cas 3 séparations:
- Le code IHM dont le role est de controller l'intéraction avec l'utilisateur (donc tous ce qui a trait avec ton interface)
- Le code business (ou métier en français) doit s'occuper comme son nom l'indique du business, c'est là ou tu devrais avoir toutes tes règles métier. Généralement en architecture SOA (Service Oriented Architecture), on créer des "services". Dans ton cas, étant donné que tu ne gère pas de service et que tu n'est pas dans cette architecture logicielle, je te conseilles juste de faire une classe à part pour chacun de tes aspects métier, qui sera considérer comme une classe de service.
Exemple: ReservationService -> dans cette classe tu y mets les méthodes qui permettent de gérer les réservations.
Idem pour chambre, ou tu peux éventuellement faire un mixte des deux si tu pense que les deux sont indissociables.

> Tu n'as pas encore pris en compte ma remarque sur la propriété 'dc'. Cela n'a rien à faire en tant que propriété de quelque classe que ce soit.
L'ouverture et la fermeture d'une connexion sur ta base de donnée doit se faire au niveau de tes méthodes d'access / d'utilisation de la base de données. Pour faire le plus simple possible pour l'instant (donc ce ne sera pas encore du joli code, mais du moins tu auras moins d'erreur possible), vire les propriétés 'dc' et créer un objet DataClass là ou tu utilises cet objet (et pense bien à le fermer à chaque fois mais je crois que c'est déjà ce qui est fait)

ps: J'ai du travail là mais si j'y pense ce soir j'essairai de te faire un truc "propre" pour que tu vois mieux ce que je veux dire. Parfois un exemple vaut mieux que de longues explications.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 13/08/2013 à 16:45
Re,

Pour faire simple et illustrer mes propos:

DatabaseConfig: sert juste à initialiser la classe du driver, et obtenir une connexion sur demande via l'instruction 'DatabaseConfig.getConnection();'
public final class DatabaseConfig {

 private static final String DRIVER = "com.mysql.jdbc.Driver";
 private static final String URL = "jdbc:mysql://localhost:3306/basehotel";
 private static final String USER = "root";
 private static final String PASSWORD = "";

 static{
  try {
   Class.forName(DRIVER);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   throw new IllegalArgumentException("Database configuration issue: " + e.getMessage());
  }
 }

 public static Connection getConnection() throws SQLException {
  return DriverManager.getConnection(URL, USER, PASSWORD);
 }

}


AbstractDBOperations: une classe abstraite regroupant deux fonctionnalités de base similaire à celles dont tu te sert pour exécuter une requête ou pour effectuer un select. Attention, dans le cas du select, la connection est à fournir (car on doit pouvoir utiliser le ResultSet retourner. La connection fournie (ainsi que le resultSet) est à fermer par la suite. Dans le cas d'un execute, une nouvelle connection est automatiquement utilisée / fermée.
public abstract class AbstractDBOperations {


 public void execute(String query) {
  Connection connection = null;
  Statement st = null;
  try {
   // Get connection
   connection = DatabaseConfig.getConnection();
   // Prepare statement
   st = connection.createStatement();
   // Execute statement
   st.executeUpdate(query);
  } catch (SQLException e) {
   // Handle exception
   e.printStackTrace();
  } finally {
   // Close connection before exit if any exception occur
   try{
    if (st != null) {
     st.close();
    }
   }catch(SQLException e){
    e.printStackTrace();
   }
   try{
    if (connection != null) {
     connection.close();
    }
   }catch(SQLException e){
    e.printStackTrace();
   }
  }
 }

 public ResultSet select(Connection connection, String query) throws SQLException {
  // Prepare statement
  Statement st = connection.createStatement();
  // Execute statement
  return st.executeQuery(query);
 }


}


RoomService: un exemple de classe regroupant les fonctionnalités métier. Ici deux fonctions de base: l'ajout d'une room et la sélection de toutes les rooms.
public class RoomService extends AbstractDBOperations {

 public RoomService() {
 }

 public void insertRoom(Room room){
  execute(
   "INSERT INTO ROOM ('number','name') VALUES('"+room.getNumber()+"','"+room.getName()+"')"
  );
 }

 public List<Room> getAllRooms(){
  Connection connection = null;
  ResultSet rs = null;
  List<Room> rooms = new ArrayList<Room>();

  try{
   connection = DatabaseConfig.getConnection();
   rs = select(connection, "SELECT * FROM ROOM");
   Room currentRoom = null;

   while(rs.next()){
    currentRoom = new Room();
    currentRoom.setNumber(rs.getInt(0));
    currentRoom.setName(rs.getString(1));
    rooms.add(currentRoom);
   }

  }catch(SQLException e){
   e.printStackTrace();
  } finally {
   // Close statement
   try{
    if (rs != null){
     rs.close();
    }
   }catch(SQLException e){
    e.printStackTrace();
   }
   // Then close connection
   try{
    if (connection != null){
     connection.close();
    }
   }catch(SQLException e){
    e.printStackTrace();
   }
  }

  return rooms;
 }


}


Et enfin la classe model 'Room' utilisée, simple:
public class Room {

 private int number;
 private String name;

 public int getNumber() {
  return this.number;
 }
 public void setNumber(int number) {
  this.number = number;
 }
 public String getName() {
  return this.name;
 }
 public void setName(String name) {
  this.name = name;
 }
}



Voilà, avec ça, au niveau de ta classe IHM il te suffirait d'instancier un objet RoomService afin de pouvoir utiliser l'un de ses deux méthodes.

L'idée est là, à toi d'adapter à au contenu de ton projet. Bien sur il y a beaucoup d'améliorations possibles, mais au moins tu as un truc plus propre sur lequel partir.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
13 août 2013 à 20:39
merci infiniment, c'est gentil de ta part, avec votre exemple ça est devenu bien clair. je vais reformuler mon code et je te l'enverrai.

il y'a d'autre question s'il vous plait. pour l'affichage de la liste des chambres dans JTable, qui contient la colonne 'Occupée', cette colonne contienne des cases à cocher (ça veut dire si la chambre est occupée, la case à cocher doit être cochée).
pouvez vous me guider à faire le code nécessaire?

merci
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 août 2013 à 11:56
Hello,

Je suppose (je n'ai pas relu le début de la discussion et le contenu de tes tables) que tu as une colonne qui correspond à l'information 'occupée' dans la table dédiée à l'entité 'Chambre' ?
Si ce n'est pas encore le cas, tu le devrais.

Quand tu l'as, c'est assez simple. Tu dois utiliser le "service" dédié aux Chambres pour récupérer la liste des chambres. (éventuellement pré filtrer si tu as ajouter des critères de sélection (et modifier ton service en fonction, en ajoutant de nouvelles fonctionnalités).
Cette récupération, tu l'effectue depuis la couche IHM, et elle te sert a faire ton affichage.
Au moment de ton affichage, là où pour chaque chambre tu affiches les informations de ta chambre, il suffit d'ajouter une checkbox, et de conditionner sa propriété 'check' (ou équivalent) selon la valeur de la propriété 'occupée' de la chambre que tu es en train d'afficher.


Je pense que le mieux serait que tu mette à jour ton code d'abord, et qu'ensuite tu me donnes les parties de code IHM et Service relatives à cette gestion des chambres, ainsi je pourrais concrétement te dire où faire quoi.
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
15 août 2013 à 20:23
d'accord merci c'est ce que je vais faire tout à l'heure
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
15 août 2013 à 22:19
j'ai oublié t'interroger sur deux choses dans votre messages:

1- pourquoi vous avez dit que "dc" est une propriété, moi je l'ai considéré comme un objet car c'est une instanciation.
2- dans votre code de la classe DatabaseConfi vous avez mis "static{ ....}" pourquoi cette instruction?

merci
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
16 août 2013 à 13:22
1- 'dc' est une instance de classe (objet) effectivement, mais c'est (ou c'était j'espère si vous avez bien modifié) aussi une propriété de votre classe UI. L'un n'empêche pas l'autre.
La faute que je voulais mettre en lumière est le faite que dc soit une propriété. Avant d'ajouter une propriété à un objet, il faut se poser des questions sur sa nature et ce que l'on souhaite en faire.
Si l'on ne souhaite pas garder indéfiniement cet objet, cela ne sert à rien de l'y mettre comme une propriété d'objet, car il restera en mémoire tant que son objet propriétaire ne sera pas ejecté de la mémoire par le garbage collector (un petit truc de Java qui nettoie la mémoire des objets inutilisés de temps à autre)
Dans ton cas, 'dc' n'est rien d'autre qu'un objet permettant d'ouvrir une connexion (via le constructeur) et d'effectuer des choses sur la base de données via cette connexion. Hors, il faut faire attention, une connexion, cela ne sert à rien de l'ouvrir d'embler et de la garder pour X temps, car il y a généralement un nombre limitée de connexion sur la base de données (pool configurable). Cela prends des ressources pour rien et amènera des complications plus tard dans le programme.
Bref, il vaut mieux créer une connexion (ou l'objet qui porte la connexion, dans ton cas c'était l'objet 'dc') à la demande, et la fermée après avoir fait des requêtes, browser des résultats, etc. de manière à libérer cette ressource.

2- le code
static {
}


directement au niveau de la classe, signifie que la partie du code dans ce static { ... } sera effectuer statiquement lorsque la classe sera chargée dans le classpath de l'application (plus ou moins, c'est pour simplifier). Et ce code ne sera effectuer qu'une seule fois, et c'est tout ! C'est ce qui est intéressant ici, car ca ne sert à rien de charger la classe du driver plusieurs fois. Une fois suffie. Et comme c'est fait de manière statique, pas besoin d'instancier un objet de cette classe, c'est pourquoi il y a une méthode statique afin de créer une connexion sur la base sur demande. Libre ensuite d'utiliser la connexion comme bon te semble.
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
17 août 2013 à 14:19
merci
voilà je me suis sur le code d'affichage des données sur JTable.

methode pour afficher la liste des chambres

public List<Chambre> tousLesChambres(){
		Connection connection=null;
		ResultSet rs=null;		
		List<Chambre> chambres=new ArrayList<Chambre>();
		
		try {
			connection=databaseConfig.getConnection();
			rs=select(connection, "select * from chambre");			
			Chambre chCourant=null;
			
			while(rs.next()){				
				chCourant=new Chambre();
				
				chCourant.setIdChambre(rs.getInt("idChambre"));
				chCourant.setTypeChambre(rs.getString("typeChambre"));

				chCourant.setOccupee(rs.getBoolean("occupee"));
				chCourant.setEtage(rs.getInt("etage"));
				chCourant.setPrix(rs.getInt("prix"));
				chCourant.setNumReservation(rs.getInt("numReservation"));
				chambres.add(chCourant);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			// Close statement
			   try{
			    if (rs != null){
			     rs.close();
			    }
			   }catch(SQLException e){
			    e.printStackTrace();
			   }
			   // Then close connection
			   try{
			    if (connection != null){
			     connection.close();
			    }
			   }catch(SQLException e){
			    e.printStackTrace();
			   }

		}
		return chambres;
		
	}


le code pour appeler cette méthode:

				SceChambre sc=new SceChambre();
					
				DefaultTableModel model=new DefaultTableModel();
				model.setColumnIdentifiers(new String[]{"Num Chambre","Type Chambre","Occupee","Etage","Prix","Num Reservation"});
				for(Chambre t:sc.tousLesChambres()){
										
					model.addRow(new String[]{String.valueOf(t.getIdChambre()),String.valueOf(t.getTypeChambre()),String.valueOf(t.isOccupee()),String.valueOf(t.getEtage()),String.valueOf(t.getPrix()),String.valueOf(t.getNumReservation())});
				}		
								
				JFrame fen=new JFrame("Tous les chambres");
				fen.setBounds(0, 0, 500, 300);
				JPanel jp=new JPanel();
				JTable jt=new JTable();				
				jt.setModel(model);

				jp.add(new JScrollPane(jt));
				
				fen.add(jp);
				fen.setVisible(true);


maintenant je veux avoir des checkbox au lieu de true ou false dans la colonne Occupee.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
19 août 2013 à 11:39
Hello,

Il me semble que tu dois pouvoir créer une classe de rendering perso, par exemple celle-ci:

public class MyCustomCellRenderer extends DefaultTableCellRenderer {  
	private static final long serialVersionUID = 1L;   
	
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
		if (value instanceof JComboBox) {               
			return (JComboBox) value;         
			}           
		if (value instanceof Boolean) {     
			JCheckBox cb = new JCheckBox();    
			cb.setSelected(((Boolean) value).booleanValue());   
			return cb;           
			}          
		if (value instanceof JCheckBox) {     
			return (JCheckBox) value;     
			}          
		return new JTextField(value.toString()); 
		}   
	}
}


Puis il ne te reste qu'à l'appliquer à ta colonne en question:
jt.getColumnModel().getColumn(2).setCellRenderer(new MyCustomCellRenderer());


Je n'ai pas testé le code bien entendu, a toi de l'appliquer à ton cas. Redis-moi si tu as un soucis.
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
21 août 2013 à 17:28
hello,
merci ça a été bien fonctionner, il ne me reste que rendre les cellules éditables. je vais essayé moi en attendant votre réponse :)

vous m'avez bien aidé c'est très gentil merci.

la dernière tache dans mon projet est l'impression. j'ai téléchargé JasperReport, et je vais commencer à faire le codage de l'impression de la facture.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
22 août 2013 à 08:15
Re,

Pour rendre ta cellule éditable, il te suffit d'overwrider la méthode isCellEditable() dans la classe de rendering.
Ainsi elle deviendrait quelque chose comme:


public class MyCustomCellRenderer extends DefaultTableCellRenderer {  
	private static final long serialVersionUID = 1L;   
	
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
		if (value instanceof JComboBox) {               
			return (JComboBox) value;         
			}           
		if (value instanceof Boolean) {     
			JCheckBox cb = new JCheckBox();    
			cb.setSelected(((Boolean) value).booleanValue());   
			return cb;           
			}          
		if (value instanceof JCheckBox) {     
			return (JCheckBox) value;     
			}          
		return new JTextField(value.toString()); 
		}   
	}

               @Override
               public boolean isCellEditable(int row, int col) {
                   return (col == 2); // True pour col 2
               }

}


A toi d'adapter selon ton besoin.

Pour ce qui est de JasperReport, cela fait un long moment que je n'ai pas eu à l'utilisé, mais tu as de bon tuto pour des utilisations simples.
Ouvre une nouvelle discussion pour tes nouveaux PB sur Jasper, ce serait plus simple.

Bon courage.
0