IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Problème de JTable


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut Problème de JTable
    Bonjour,

    Je voudrais mettre en fait ma JTable dans une JFrame à un endroit précis mais j'ai quelques problèmes. Je vous montre un aperçu de ce que je veux faire
    Donc en gros remplacer la table de la JFrame Affichage par celle de Resultat

    merci

    Je vous mets une partie du code de la JFrame Affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
     
    public class Affichage extends JFrame
    {
    	private JTextField _nom, _tel;
     
    	private JButton Valider;
    	private JButton Listeb;
     
     
    	public String nom;
    	public String tel;
     
     
    /*-------------------------------*/
     
    	public Affichage()
    	{
     
    		Container contenu = getContentPane();
     
    		contenu.setLayout(null);
     
     
    		_nom = new JTextField(20);
    		//_nom.setText(req.remplirRequete("presentation","nom","select nom from presentation"));
     
    		_nom.setBounds(220,80,180,20);
    		_nom.setEnabled(false);
     
    		contenu.add(_nom);
     
     
    		JPanel F13 = new JPanel();
     
    		F13.setLayout(new FlowLayout(FlowLayout.LEFT));
     
    		F13.add(new JLabel("BUREAUX"));
     
    		F13.setBounds(90, 540, 90, 20);
     
     
     
    		contenu.add(F13);
     
     
    		JPanel F14 = new JPanel();
     
    		F14.setLayout(new FlowLayout(FlowLayout.LEFT));
     
    		F14.add(new JLabel("Tel :"));
     
    		F14.setBounds(10, 560, 60, 20);
     
     
     
    		contenu.add(F14);
     
     
    		_tel = new JTextField(20);
    		//_tel.setText(req.remplirRequete("presentation","tel","select tel from presentation"));
     
    		_tel.setBounds(70,560,100,20);
    		_tel.setEnabled(false);
     
    		contenu.add(_tel);
     
    		/*detail facture
    		*1ere JTable
    		*/
    		String[] columnNames = {"N° des prix",
                                    "Designation des ouvrages",
                                    "Unités",
                                    "Quantités",
                                    "Prix Unitaires",
    				"Montant"};
     
     
            	Object[][] data = { /*bdd*/ };
     
     
    		/*2eme JTable*/
    		String[] columnNamesBis = {"Q*T",
                                    "montants"
                               	};
     
     
    		Listeb = new JButton("Resultat");
    		Listeb.setBounds(500, 500, 110, 30);
     
    		/*Listeb.addActionListener(new BtnTableauListenerFacturation("select * from detailFacture", "DetailFacture", "Resultat"));*/
     
    		contenu.add(Listeb);
     
    		Valider = new JButton("Valider");
     
    		Valider.setEnabled(true);
     
    		Valider.setBounds(200, 640, 100, 20);
     
    		//Valider.addActionListener(new MonActionListenerAffichage(this)
    		contenu.add(Valider); 
     
    	}
     
     
    public static void main(String[] args)
     
    	{
     
    		Affichage fenetreAffichage = new Affichage();
     
    		fenetreAffichage.setTitle("Affichage");
     
            	fenetreAffichage.setSize(800, 700);
     
            	fenetreAffichage.setVisible(true);
    		fenetreAffichage.setLocationRelativeTo(null); //centrer la fenêtre
     
    		//fenetreAffichage.setResizable(false);
     
    		fenetreAffichage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    	}
     
    }

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Je n'ai pas fini de comprendre
    C'est quoi "Resultat" ?
    Tu cherches à remplacer graphiquement une JTable par une autre ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Y a pas de table dans ton code ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Je n'ai pas fini de comprendre
    C'est quoi "Resultat" ?
    Tu cherches à remplacer graphiquement une JTable par une autre ?
    Resultat en fait c'est quand je clique sur mon bouton "Resultat" il affiche la JTable mais il affiche que la JTable je n'arrive pas à mettre de JTextField et autre comme sur la JFrame "Affichage".
    Donc moi je veux pas cliquer sur ce bouton je veux que la table soit afficher dans ma JFrame Affichage et l'autre c'était pour faire des tests mais c'est moche donc celle là je la retirerai.
    Sinon oui j'essaye de mettre la JTable dans l'autre JFrame en remplaçant.

    Sinon oui il n'y a pas de JTable dans mon code vu que je faisais des tests mais qui n'aboutissait pas lol

    Celle où je clique sur le bouton fonctionne très bien je veux juste l'intégrer dans ma JFrame Affichage

    J'espère que sa va là

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ca va un peu mieux. Mais n'hésite pas à utiliser les points pour terminer tes phrases, ça aide à bien respirer lorsqu'on te relit

    Il ne faut pas changer l'instance de JTable, mais uniquement son modèle. Je t'encourage à aller voir la FAQ pour l'utilisation d'une JTable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    J'ai déjà regardé la faq ainsi que des exemples de JTable mais celà ne m'a pas inspiré

    donc ce serait au niveau de mon modèle que sa coince?

  7. #7
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    bon personnellement voila comment je ferai :

    premierement je crérai comme l'a fais remarqué dinogoban une nouvelle classe et surtout un nouveau model de ta table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public class newTableModel extends extends DefaultTableModel {
    ensuite je définirai l'allure que je veux donner a ma table puis (d'aprés ce que j'ai compris dans tes explication tu as déja une table dans ta frame et tu veux la remplacer) il te suffira donc d'appliquer le nouveau model a ta table quand tu le souhaiteras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DefaultTableModel model = new newTableModel();
    		JTable table = new JTable(model);
    mais je trouve que l'utilisation de layout peux parfois se reveler utile meme si je n'est pas tout a fait compris ce que tu veux obtenir...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Bonjour,

    Mon modèle est déjà créé c'est juste la mettre dans ma JFrame car pour le moment il est dans une fenêtre à part et il est aussi relié à la base de données.





    Donc le tableau du haut c'est celui que je veux mettre à la place du tableau du bas en gros le tableau du bas sert à rien c'était juste pour essayer de recréer une nouvelle Jtable mais bon je galère .

    voilà

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Voici mon modèle mais je n'arrive pas à afficher mon tableau dans la JFrame

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import javax.swing.table.DefaultTableModel;
     
    public class MaTableModel extends DefaultTableModel {
     
    private static final long serialVersionUID = 2L; 
    	public Object [][] donnees;
    	public String [] titres;
    	public Affichage aff;
     
    	public MaTableModel(Object [][] donnees, String [] titres) {
    		if(donnees == null) System.out.println("donnees c nULL");
    		if(titres == null) System.out.println("titres c nULL");
    		if(donnees != null && titres != null){
    			this.donnees = donnees; 
    			this.titres = titres; 
    		}
    		else System.out.println("erreur class MaTableModel constructeur");
    	}
     
    	public int getColumnCount() { 
    		return titres.length; 
    	}
     
    	public int getRowCount() { 
    		return donnees.length; 
    	}
     
    	public Object getValueAt(int parm1, int parm2) { 
    		return donnees[parm1][parm2]; 
    	}
     
    	//Donne titre des colonnes
    	public String getColumnName(int col){ 
    		return (String) titres[col]; 
    	} 
     
     
    	public Class getColumnClass(int c){
    		return getValueAt(0,c).getClass();
    	}
     
    	public void setValueAt(Object value, int row, int col){
    		RequeteFacturation maRequete = new RequeteFacturation();
    		String nomColonne = getColumnName(col);
    		int colcode = 0;
    		for(int i=0; i< getColumnCount(); i++){
    			if(titres[i].compareToIgnoreCase("code") == 0)
    				colcode = i;
    		}
    		String query = "UPDATE "+this.aff.getNomTable()+" SET "+nomColonne+" = '"+value+"' where "+getColumnName(0)+" = '"+getValueAt(row, colcode)+"'";
    		System.out.println("modification base via classe Affichage : \n\t"+query);
    		if(maRequete.executeUpdate(query)){
    			donnees[row][col] = value;
    			fireTableCellUpdated(row,col);
    		}
    	}
     
    		public void setAffichage(Affichage aff){
    		this.aff = aff;
    	}
    }
    et après dans ma classe Affichage je dois créer un tableau avec le modèle suivant à une position donné mais je galère

  10. #10
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    bon perso voila comment le ferai : dans ma JFrame je mettrai un Panel principal que je seterai en BorderLayout: au Nord tu met tout ce que tu as en haut et au sud tu met un CardPanel. ta JTable tu la met dans un panel que tu mettras dans ton CardPanel et le tour est joué... tu n'as plus qu'a ajouter ton cardPanel a ton panel principal et et ton panel pricipal a ta JFrame :

    ajout d'un panel a une JFrame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JPanel tonPanelPrincipal = new TaClassePanelPrincipal();
    setContentPane(tonPanelPrincipal);

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    merci navah mais finalement j'ai réussi par contre j'ai un autre problème je n'arrive pas à afficher ma requete dans mon tableau, j'arrive que à afficher le titre des colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    public class Affichage extends JFrame {
     
    public Affichage()
    	{
    		tableau();
            }
     
     
    private void tableau() {
     
    /*----------------tableau facturation----------*/
    		this.getContentPane().setLayout(null);
    		jScrollPane1.setBounds(new Rectangle(10,250,700,180));
     
    		jScrollPane1.getViewport().add(_facture, null);
    		this.getContentPane().add(jScrollPane1, null);
     
    		TableModel ModelTable = _facture.getModel();
    		_facture.setModel(ModelTable);
     
    		this. _facture = new JTable(new ModelTable());
     
    	}
     
    /*--------------connexion base de donnée--------------*/
     
    	public void connexionBD() 
    {
    	Connection con = null;
     
    	try
    	{
    //chargement de driver
    	Class.forName("org.postgresql.Driver");
    	System.out.println ("Class forName ok");
    	}
    	catch(Exception e)
    	{
    	System.out.println ("erreur:Driver introuvable");
    	}
     
    //connexion à la base
    	try
    	{
    		String url = "jdbc:postgresql://localhost/lorban";
    		String login = "igi1";
    		String passwd = "igi1";
     
    		con =DriverManager.getConnection(url,login, passwd);
    		System.out.println ("connexion base etablie");
    	}
    	catch(Exception e)
    	{
    		System.out.println ("erreur: base introuvable");
    	}
    }
     
    /*-------------------ModelTable-----------------*/
    class ModelTable extends AbstractTableModel
    {
    	public Object[][] donnees;
    	public String[] titres;
    	int nbLignes;
    	int nbColonnes;
     
    	String url = "jdbc:postgresql://localhost/lorban";
    	String login = "igi1";
    	String passwd = "igi1";
     
    		public ModelTable() 
    		{
    // Récupération des données dans la BDD
    	try
    	{
    	Class.forName("org.postgresql.Driver"); // On spécifie quel driver le programme charge
    	Connection con =DriverManager.getConnection(url,login, passwd);
    	Statement stmt = con.createStatement();
    	ResultSet res = stmt.executeQuery("SELECT * FROM detailFacture");
    	ResultSetMetaData resmd = res.getMetaData();
     
    // On récupère le nombre de lignes et de colonnes du ResultSet
    	this.nbLignes = res.getRow() + 1;
    	this.nbColonnes = resmd.getColumnCount();
    	this.titres = new String[nbColonnes];
    	this.donnees = new Object[nbLignes][nbColonnes];
     
    	for (int i=1; i<nbColonnes +1; i++)
    	{
    	String nomColonne = resmd.getColumnName(i);
     
    // Requete SQL pour traduire le nom de la colonne
    	titres[i-1] = nomColonne;
    	}
    	}
    	catch (SQLException s){System.out.println("SQL Error : " + s.toString() + " " + s.getErrorCode() + " " + s.getSQLState());}
    	catch (Exception e){System.out.println("Erreur : " + e.toString() + e.getMessage());}
     
    		}//fermeture ModelTable
     
    public Object getValueAt(int row, int col) {
    return donnees[row][col];
    }
     
    public int getRowCount() {
    return nbLignes;
    }
     
    public int getColumnCount() {
    return nbColonnes;
    }
     
    public String getColumnName(int col) {
    return titres[col];
    }
     
    public void setValueAt(Object Value, int row, int col) 
    {
    donnees[row][col] = Value;
    }
    }
    merci

  12. #12
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    si je comprends bien tu affiche le titre des colonnes mais pas leur contenue c'est ca ? es tu sur de bien charger tes tables ? essais de charger une table dans une liste et de l'afficher ensuiote... (je te dis ca parce que je ne connais pas bien jdbc)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    oui c'est bien ça le contenu je n'arrive pas à l'afficher dans mon tableau serait t'il possible d'avoir un exemple? Sinon sous postgres mes tables s'affichent parfaitement si j'ai bien compris.

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int i=1; i<nbColonnes +1; i++)
    	{
    	String nomColonne = resmd.getColumnName(i);
     
    // Requete SQL pour traduire le nom de la colonne
    	titres[i-1] = nomColonne;
    	}
    c'est avec ça que j'arrive à afficher mes titres mais le contenu je n'y arrive pas

  14. #14
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    si tu arrive a charger ta ta tble dans une liste , il te suffit d'utiliser :

    setValueAt(Object aValue, int row, int column)
    Sets the value for the cell in the table model at row and column.
    ==> source JAVADOC

    pour remplir ta table et tu peux mettre setVisible(true) pour qu'elle s'affiche

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    sur une liste pas tester je vais essayer

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Merci nayah, finalement c'est bon j'ai réussi j'ai tout recommencé à zero et repris étape par étape


    Maintenant ce que je voudrais faire c'est effacer, avec l'aide d'un bouton, toutes les données de ma JTable donc avec un DROP TABLE et apres il faut surement recréer la table. Sous postgres j'y arrive mais pas en java

    car sur quelques sites ils suppriment seulement les lignes et moi je veux tout mais je n'y arrive pas si quelqu'un avait un exemple ou une démarche pour y aboutir ça m'aiderait beaucoup.

    merci

  17. #17
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utilises un TRUNCATE plutôt qu'un drop. L'odre DDL truncate a pour effet de supprimer toutes les données de ta table. (ou au pire un delete from MA_TABLE, mais ce sera plus lent

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    ok merci je vais me renseigner sur TRUNCATE car je ne connais pas

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    c'est bon merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème TableSorter Jtable
    Par leneuf dans le forum Composants
    Réponses: 2
    Dernier message: 16/11/2006, 17h54
  2. Problème de JTable
    Par arsenik7 dans le forum Composants
    Réponses: 17
    Dernier message: 01/08/2006, 09h36
  3. Problème sur JTable
    Par arsenik7 dans le forum Composants
    Réponses: 4
    Dernier message: 03/07/2006, 16h42
  4. Problème avec Jtable
    Par @yoyo dans le forum Composants
    Réponses: 4
    Dernier message: 22/03/2006, 15h51
  5. problème avec Jtable
    Par magic001 dans le forum Composants
    Réponses: 6
    Dernier message: 15/03/2006, 23h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo