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

AWT/Swing Java Discussion :

Impossible d'utiliser la méthode d'ajout de mon modèle dans une autre Classe.


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Anubshra
    Inscrit en
    Août 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Anubshra

    Informations forums :
    Inscription : Août 2015
    Messages : 3
    Par défaut Impossible d'utiliser la méthode d'ajout de mon modèle dans une autre Classe.
    Bonjour,

    Je viens vers vous car cela fait des heures, entre cette nuit et aujourd'hui, que je me retrouve bloqué dans l'écriture de mon programme.

    En effet, je dois créer une JTable afin d'y stocker des données, les créer, modifier et supprimer. Pour ce faire, j'ai suivi le le tutoriel à ce sujet mais bien que j'arrive à reproduire les exemples proposés, une fois dans mon codee je me retrouve bloqué par le fait que je cherche à appeler la méthode d'ajout ("ajoutRessource") de la classe "ModeleTableauRessources" dans la méthode "creerRessource" classe BtnActionListener sans y parvenir. J'ai fait de nombreux essais au niveau des paramètres des constructeurs en y mettant soit l'Arraylist d'origine à modifier, soit sa Classe mais rien n'y fait, il m'est impossible d'appeler la méthode "ajoutRessource" de la classe "ModeleTableauRessources".

    De plus, même quand j'arrive à utiliser la méthode "ajoutRessource" à partir de sa Classe, cela ne rafraichit pas la JTable...

    Avant de vous présenter mon code, je tiens tout d'abord à m'excuser du manque de lisibilité de celui-ci. Je débute en Java et un de mes défauts principaux est de ne pas assez varier les noms de variables/méthodes, etc. Je ferai mieux dans mes prochains programmes mais pour celui-ci, je doute d'avoir le temps de modifier tout ça, car je dois le rendre Mardi.
    Je doute fort que mon code souffre d'autres défauts et m'en excuse au préalable...

    En tous cas, merci à vous pour votre aide.

    La classe "ModeleTableauRessources".
    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
    package presentation;
     
    import java.util.ArrayList;
     
    import javax.swing.table.AbstractTableModel;
     
    import metier.Ressource;
    import metier.Ressources;
     
    public class ModeleTableauRessources extends AbstractTableModel{
     
    	private Ressources ressources;
     
    	private final static String[] entetes = {"Nom", "Prénom", "Spécialité", "Profile", "Projets", "Tâches"};
     
    	public ModeleTableauRessources(Ressources ressources) {
     
    		this.ressources = ressources;
    	}
     
    	public ModeleTableauRessources(Ressources ressources, Ressource ressource) {
     
    		super();
     
    		this.ressources = ressources;
    	}
     
    	@Override
    	public int getRowCount() {
    		return ressources.getRessources().size();
    	}
     
    	@Override
    	public int getColumnCount() {
    		return entetes.length;
    	}
     
    	public String getColumnName(int columnIndex) {
    		return entetes[columnIndex];
    	}
     
    	@Override
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		switch (columnIndex) {
    		case 0:
    			return ressources.getRessources().get(rowIndex).getNom();
    		case 1:
    			return ressources.getRessources().get(rowIndex).getPrenom();
    		case 2:
    			return ressources.getRessources().get(rowIndex).getSpecialite();
    		case 3:
    			return ressources.getRessources().get(rowIndex).getProfil();
    		case 4:
    			return ressources.getRessources().get(rowIndex).getNumPoste();
    		case 5:
    			return ressources.getRessources().get(rowIndex).getNumPortable();
    		default:
    			return null;
    		}		
    	}
     
    	private void ajoutRessource(Ressource ressource)
    	{
    		System.out.println("add : "+ressource);
     
    		ressources.getRessources().add(ressource);
     
    		fireTableRowsInserted(ressources.getRessources().size()-1, ressources.getRessources().size()-1);
    	}
     
    	private void suppressionRessource(int rowIndex)
    	{
    		ressources.getRessources().remove(rowIndex);
     
    		fireTableRowsDeleted(rowIndex, rowIndex);
    	}
     
    	public String[] getEntetes() {
    		return entetes;
    	}
    }
    La classe Ressources où se trouve l'Arraylist d'origine qui doit être modifiée par la méthode d'ajout de la classe ci-dessus.
    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
    package metier;
     
    import java.util.ArrayList;
    import java.util.Iterator;
     
    import presentation.ModeleTableauRessources;
     
    public class Ressources {
     
    	private ArrayList<Ressource> listeRessources;
     
     
    	public Ressources() {
    		listeRessources = new ArrayList<Ressource>();
    	}
     
    	public Ressources(ArrayList<Ressource> ressources) {
    		if (ressources == null) this.listeRessources 	= new ArrayList<Ressource>();
    		else                 	this.listeRessources 	= ressources;
    	}
     
    //	public void ajoutRessource(Ressource ressource)
    //	{
    //		listeRessources.add(ressource);		
    //	}
     
    	public ArrayList<Ressource> getRessources()
    	{
    		return listeRessources;
    	}
     
    	@Override
    	public String toString() {
    		return "Ressources [ressources=" + listeRessources + "]";
    	}
    }
    La classe "BtnActionListener" et sa méthode "creerRessource" (J'ai retiré le reste pour vous éviter de la lecture. J'adapterai le reste au besoin mais si vous en avez l'utilité, je vous le transmettrai)
    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
    127
    128
    package control;
     
    import java.awt.Dimension;
    import java.awt.Window;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
     
    import javax.swing.ComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JOptionPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.RowFilter;
    import javax.swing.SortingFocusTraversalPolicy;
    import javax.swing.table.TableModel;
    import javax.swing.table.TableRowSorter;
     
    import metier.Ressources;
    import metier.Ressource;
    import presentation.Administration;
    import presentation.CreerRessources;
    import presentation.Fenetre;
    import presentation.ModeleTableauRessources;
    import presentation.ModifierRessources;
     
    public class BtnActionListener implements ActionListener {
     
    	private Fenetre fenetre;
    	private CreerRessources creerRessources;
    	private ModifierRessources modifierRessources;
    	private Ressources ressources;
    	private Ressource ressource;
    	private	ModeleTableauRessources modeleTabRessources = new ModeleTableauRessources(ressources, ressource);
    	private TableRowSorter<TableModel> sorter;
     
     
    	public BtnActionListener(Fenetre fenetre, Ressources ressources) {
    		super();
    		this.fenetre = fenetre;
    		this.ressources = ressources;
    	}
     
    	public BtnActionListener(Fenetre fenetre, Ressources ressources, TableRowSorter<TableModel> sorter) {
    		super();
    		this.fenetre = fenetre;
    		this.ressources = ressources;
    		this.sorter = sorter;
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent evenement) {
     
    		if 		(fenetre instanceof Administration)			traitementAdministration(evenement);
    		else if (fenetre instanceof CreerRessources)
    			try {
    															traitementCreerRessources(evenement);
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		else if (fenetre instanceof ModifierRessources)		traitementModifierRessources(evenement);
    		else System.out.println("Classe non trouvée");
     
    	}
     
    	public void traitementAdministration(ActionEvent evenement)
    	{
    		Administration administration = (Administration) fenetre;
    		String critere = null;
     
    		if (evenement.getSource() ==  administration.getBtnCreerRessource() || evenement.getSource() ==  administration.getMnCreerRessource())				fenetreCreerRessource();
    		if (evenement.getSource() ==  administration.getBtnModifierRessource() || evenement.getSource() ==  administration.getMnModifierRessource())		fenetreModifierRessource();
    		if (evenement.getSource() ==  administration.getBtnSupprimerRessource() || evenement.getSource() ==  administration.getMnSupprimerRessource())		supprimerRessource();
    		if (evenement.getSource() ==  administration.getCbCritereRecherche())																				critereRecherche(administration.getModelCriteres().getSelectedCritere());
    		if (evenement.getSource() ==  administration.getBtnRechercher())																					rechercherRessource(administration.getTxtChampRecherche().getText(), critere, sorter);
    	}
     
    	public void traitementCreerRessources(ActionEvent evenement)
    	{
    		this.creerRessources = (CreerRessources) fenetre;
     
    		if (evenement.getSource() == creerRessources.getBtnCreer())			creerRessource();
    		if (evenement.getSource() == creerRessources.getBtnAbandonner())	abandonner();
    	}
     
    	public void creerRessource()
    	{
    		String nom = null;
    		String prenom = null;
    		String specialite = null;
    		String numPoste = null;
    		String numPortable = null;
    		String email = null;
    		String identifiant;
    		String mDP;
     
    		creerRessources.getTxtMessageErreur().setText(null);
     
    		Object valeurVerif = creerRessources;
     
    		if ( verifSaisieTexte(creerRessources, creerRessources.getTxtNom().getText().trim())
    				&&  verifSaisieTexte(creerRessources, creerRessources.getTxtPrenom().getText().trim())
    				&&  verifSaisieNumTel(creerRessources, creerRessources.getTxtNumPoste().getText().trim())
    				&&  verifSaisieNumTel(creerRessources, creerRessources.getTxtNumMobile().getText().trim())
    				&&  verifSaiseEmail(creerRessources, creerRessources.getTxtEmail().getText().trim())
    				&&  creerRessources.getTxtSpecialite().getText().trim() != null)
    		{
    			nom = creerRessources.getTxtNom().getText().trim();
    			prenom = creerRessources.getTxtPrenom().getText().trim();
    			specialite = creerRessources.getTxtSpecialite().getText().trim();
    			numPoste = creerRessources.getTxtNumPoste().getText().trim();
    			numPortable = creerRessources.getTxtNumMobile().getText().trim();
    			email = creerRessources.getTxtEmail().getText().trim();
     
    			identifiant = calculID(prenom, nom);
    			mDP = calculMDP(nom);
     
    			creerRessources.getTxtIdentifiant().setText(identifiant);
    			creerRessources.getTxtMDP().setText(mDP);
     
    			ressource = new Ressource(identifiant, mDP, nom, prenom, specialite, email, numPoste, numPortable);
    			System.out.println(ressources);
     
    			//TODO Créer une fenêtre de validation de la création et de confirmation de création (JOptionPane ?).
    		}
    	}
    }
    La Classe "Administration" dans laquelle je crée ma JTable.
    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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    package presentation;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JScrollPane;
    import javax.swing.JTextField;
    import javax.swing.border.EmptyBorder;
     
    import com.sun.corba.se.impl.encoding.CodeSetConversion.BTCConverter;
    import com.sun.corba.se.impl.protocol.BootstrapServerRequestDispatcher;
     
    import control.BtnActionListener;
    import javafx.scene.control.PasswordField;
    import metier.Ressource;
    import metier.Ressources;
     
    import javax.swing.JSplitPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;
    import javax.swing.table.TableRowSorter;
     
    import java.awt.FlowLayout;
    import javax.swing.BoxLayout;
    import java.awt.GridLayout;
    import java.awt.Font;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.awt.event.ActionEvent;
    import javax.swing.border.EtchedBorder;
    import java.awt.Color;
    import javax.swing.GroupLayout;
    import javax.swing.GroupLayout.Alignment;
    import javax.swing.JComboBox;
     
    public class Administration extends Fenetre {
     
    	private JPanel contentPane;
    	private JTextField txtMessageErreur;
    	private JTextField txtChampRecherche;
    	private JButton btnCreerRessource;
    	private JButton btnModifierRessource;
    	private JButton btnSupprimerRessource;
    	private JButton btnRechercher;
    	private JMenuItem mnCreerRessource;
    	private JMenuItem mnModifierRessource;
    	private JMenuItem mnSupprimerRessource;
    	private JTable tableauRessources;
    	private JComboBox cbCritereRecherche;
    	private TableRowSorter<TableModel> sorter;
     
     
    	/**
             * Create the frame.
             * @param ressources 
             * @param modeleTableauRessources 
             */
    	public Administration(Ressources ressources) {
     
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		contentPane.setLayout(new BorderLayout(0, 0));
    		setContentPane(contentPane);
     
     
    		//Création des différents panneau composant le panneau conteneur
    		JPanel panneauHaut = panneauHaut();
    		JPanel panneauRessources = panneauRessources(ressources);
     
    		//Ajouter le tableau du haut au panneau principal
    		contentPane.add(panneauHaut, BorderLayout.NORTH);
    		contentPane.add(panneauRessources, BorderLayout.CENTER);
     
    		//Création d'un champ pour les messages d'erreur
    		txtMessageErreur = new JTextField();
    		txtMessageErreur.setForeground(Color.RED);
    		txtMessageErreur.setFont(new Font("Arial", Font.PLAIN, 11));
    		txtMessageErreur.setEditable(false);
    		txtMessageErreur.setOpaque(true);
    		contentPane.add(txtMessageErreur, BorderLayout.SOUTH);
    		txtMessageErreur.setColumns(30);
     
    		//Création des Listeners
    		BtnActionListener aal = new BtnActionListener(this, ressources, sorter);
     
    		btnCreerRessource.addActionListener(aal);
    		btnModifierRessource.addActionListener(aal);
    		btnSupprimerRessource.addActionListener(aal);
    		btnRechercher.addActionListener(aal);
    		cbCritereRecherche.addActionListener(aal);
    		mnCreerRessource.addActionListener(aal);
    		mnModifierRessource.addActionListener(aal);
    		mnSupprimerRessource.addActionListener(aal);
     
    	}
     
    	private JPanel panneauRessources(Ressources ressources)
    	{
    		//Création du panneau de Ressources qui se trouve dans le panneau du haut
    		JPanel panneauRessources = new JPanel();
    		panneauRessources.setLayout(new BorderLayout(0, 0));
     
    		//Création des différents panneaux contenus dans le panneau Ressources
    		JPanel panneauRessourcesTitrePartie = panneauRessourcesTitrePartie();
    		JPanel panneauRessourcesPrincipal = panneauRessourcesPrincipal(ressources);
    		JPanel panneauRessourcesBoutons = panneauRessourcesBoutons();
     
    		//Ajout des différents panneaux dans le panneau Ressources
    		panneauRessources.add(panneauRessourcesTitrePartie, BorderLayout.NORTH);
    		panneauRessources.add(panneauRessourcesPrincipal, BorderLayout.CENTER);
    		panneauRessources.add(panneauRessourcesBoutons, BorderLayout.SOUTH);
     
    		return panneauRessources;	
    	}
     
    	private JPanel panneauRessourcesPrincipal(Ressources ressources)
    	{
    		//Création du panneau principal
    		JPanel panneauRessourcesPrincipal = new JPanel();
    		panneauRessourcesPrincipal.setLayout(new BorderLayout(0, 0));
     
    		//Création des différents composants contenus le panneau principal
    		JPanel panneauChampRecherche = panneauChampRecherche();
    		JPanel panneauRessourcesTableau = panneauRessourcesTableau(ressources);
     
    		//Ajout des différents composants
    		panneauRessourcesPrincipal.add(panneauChampRecherche, BorderLayout.NORTH);
    		panneauRessourcesPrincipal.add(panneauRessourcesTableau);
     
    		return panneauRessourcesPrincipal;
    	}
     
    	private JPanel panneauRessourcesTableau(Ressources ressources)
    	{
    		//Créer le panneau du tableau qui se trouve dans le panneau de Ressources
    		JPanel panneauRessourcesTableau = new JPanel();
    		panneauRessourcesTableau.setPreferredSize(new Dimension(700, 700));
    		panneauRessourcesTableau.setLayout(new BorderLayout(0, 0));
     
    		//Ajout du tableau de Ressources au panneau du tableau
            tableauRessources = new JTable(new ModeleTableauRessources(ressources));
            sorter = new TableRowSorter<TableModel>(tableauRessources.getModel());
            tableauRessources.setAutoCreateRowSorter(true);
            sorter.setSortsOnUpdates(true);
     
     
    		JScrollPane scrolltableauRessources = new JScrollPane(tableauRessources);
    		panneauRessourcesTableau.add(scrolltableauRessources, BorderLayout.CENTER);
     
    		return panneauRessourcesTableau;
    	}
    }
    Je ne vous poste pas la Classe Ressource qui est mentionnée dans différents Constructeurs ou dans des Méthodes mais si vous en avez besoin, je vous l'enverrai.

    Encore merci pour votre aide,

    Cordialement,

    Anubshra

  2. #2
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Ta méthode d'ajout étant private c'est normal que tu ne puisse pas l’appeler de l'extérieur. Utilise tu un IDE pour coder ? Normalement les IDEs te permette de vite détecter ce genre de boulette et en tant que débutant ça aide !

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Anubshra Voir le message
    De plus, même quand j'arrive à utiliser la méthode "ajoutRessource" à partir de sa Classe, cela ne rafraichit pas la JTable...
    Tu crées 2 modèles, un dans BtnActionListener par private ModeleTableauRessources modeleTabRessources = new ModeleTableauRessources(ressources, ressource); et un dans Administration, par tableauRessources = new JTable(new ModeleTableauRessources(ressources));.

    Ce ne sont pas les mêmes instances : les manipulations qui sont faites sur l'une ne sont pas faites sur l'autre. Ainsi les modifications du modèle faites par le bouton ne sont pas répercutées sur le modèle utilisé par la JTable.

    Dans le constructeur de Administration, tu as (extrait) :
    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
    public Administration(Ressources ressources) {
     
    		/*...*/
     
    		//Création des différents panneau composant le panneau conteneur
    		JPanel panneauHaut = panneauHaut();
    		JPanel panneauRessources = panneauRessources(ressources);
     
    		/*...*/
     
    		//Création des Listeners
    		BtnActionListener aal = new BtnActionListener(this, ressources, sorter);
     
    		/*...*/
     
    	}
    Au lieu de passer resources en argument, tu peux créer le modèle à partir de resources, et le passer en argument à la place de ressources (en modifiant évidemment la méthode et l'argument en question) :

    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
    public Administration(Ressources ressources) {
     
    		/*...*/
                    ModeleTableauRessources modeleTabRessources = new ModeleTableauRessources(ressources, ressource);
     
    		//Création des différents panneau composant le panneau conteneur
    		JPanel panneauHaut = panneauHaut();
    		JPanel panneauRessources = panneauRessources(modeleTabRessources );
     
    		/*...*/
     
    		//Création des Listeners
    		BtnActionListener aal = new BtnActionListener(this, modeleTabRessources , sorter);
     
    		/*...*/
     
    	}
    Ensuite, bien entendu, il faut modifier le modèle pour que le contenu JTable se modifie, donc quand tu créés une nouvelle ressource, il faut l'ajouter, en appelant ajoutRessource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class BtnActionListener {
    /*...*/
    public void creerRessource()
    	{
    /*...*/
    ressource = new Ressource(identifiant, mDP, nom, prenom, specialite, email, numPoste, numPortable);
    			System.out.println(ressources);
     
    modeleTabRessources.ajoutRessource(ressource); // ajout de la ressource au modèle (bien sûr, il faut que la méthode soit public (cf remarque de@Lady !) pour pouvoir l'appeler)


    Attention, par ailleurs, à ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private Ressource ressource;
    	private	ModeleTableauRessources modeleTabRessources = new ModeleTableauRessources(ressources, ressource);
    Le modèle est créé avec les valeurs passées au moment de l'exécution de cette déclaration (donc au moment de l'instanciation de BtActionListener, avec la valeur de resources qu'il a à ce moment précis, avant que le constructeur ne soit exécuté (donc pas avec la valeur du paramètre de BtnActionListener, mais null, la valeur par défaut lors de la déclarationprivate Ressources ressources;).
    Ce n'est pas parce que 2 variables portent le même nom qu'il s'agit de la même chose : le nom d'une variable est déclarée dans un espace de lignes de code, qu'on appelle portée. 2 variables dans 2 espaces de lignes de code (2 méthodes différentes, 2 classes différentes, 2 blocs différentes...) peuvent avoir le même nom, et avoir chacune leur propre valeur et évoluer de manière différente.

    En tout cas, si tu appelais ajoutRessource() comme indiqué ci-avant, sans correction, tu obtiendrais une NullPointerException.
    D'une manière générale, personnellement, je n'initialise jamais mes attributs autre part que dans un constructeur pour éviter ce type d'erreur.

    Attention aussi aux variables et paramètres qui ne servent à rien, comme resource pour ton modèle. Tu as probablement été obligé de créé une variable ressource inutile dans BtnActionListener rien qu'à cause de l'existence du paramètre, dont tu ignores la valeurdans le modèle (donc elle ne sert à rien). Tu aurais pu aussi bien faire new ModeleTableRessources(ressources, null) d'ailleurs. Lorsque tu as des variables qui ne servent à rien, supprime-les au plus vite, ça te simplifiera le code, et donc sa compréhension, et donc sa mise au point...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Anubshra
    Inscrit en
    Août 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Anubshra

    Informations forums :
    Inscription : Août 2015
    Messages : 3
    Par défaut
    Bonsoir à tous les 2 !

    Tout d'abord, je tiens à m'excuser de vous répondre si tard. Ce n'est pas faute d'y avoir pensé à de nombreuses reprises mais entre les études et tout, j'avoue qu'en ce moment, j'ai la tête vraiment ailleurs.

    Effectivement, il y a encore du boulot avant que j'écrive un code correct. Mais bon, petit à petit ça s'améliore... un peu...

    Du coup, effectivement, bien vu le private. Cette fois-là, je ne sais pas pourquoi mais j'avais fortement envie de mettre du private un peu partout et du coup, déjà auparavant j'avais eu ce genre de souci... Là, je ne m'en suis pas aperçu...

    @Lady : J'utilise Eclipse comme IDE. Je n'ai peut-être pas sû déchiffrer les messages d'erreur pour comprendre d'où venait le problème.

    @joel.drigo : Merci beaucoup pour tes explications.
    Je dois effectivement faire plus attention à mes variables comme tu me l'a fait remarquer. Pour ce qui est du fait d'avoir créé 2 instances différentes du modèle de tableau, je crois que je voulais propager le modèle mais je n'avais pas vraiment compris comment ça fonctionnait. Les premiers mois en POO ne sont pas évidents.
    Par contre, comme on m'a dit qu'il faut séparer l'affichage de la logique métier, je n'ai pas créé le modèle du tableau dans Ressources. Sûrement une incompréhension de ma part.

    À peine terminé ma dernière évaluation, j'en ai eu une nouvelle que je dois rendre Mercredi prochain. Il n'est pas garanti que d'ici là, je ne repasse pas vous poser quelques questions.

    Encore merci à vous.

    Excellente soirée !

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Anubshra Voir le message
    Par contre, comme on m'a dit qu'il faut séparer l'affichage de la logique métier, je n'ai pas créé le modèle du tableau dans Ressources. Sûrement une incompréhension de ma part.
    C'est bien le cas dans ce que je t'ai indiqué : le modèle est créé dans la vue (Administration). Ressources n'a bien aucune référence sur le MVC. Normalement, le controler devrait créer le modèle, et le fournir à la vue. On peut aussi créer le modèle séparement et le passer en paramètre au constructeur de la vue. Disons que lorsqu'on fait un composant assez générique pour qu'il soit envisageable de pouvoir faire plusieurs modèles différents selon les besoins, c'est mieux. Mais si le modèle est unique autant que cela soit transparent. Si on regarde JTable, on peut la créer en passant un modèle en paramètre, ou directement en passant les données (par tableau ou Vector), ce qui créé automatiquement un modèle par défaut : on a là la combinaison des deux solutions.
    En gros :
    1. solution 1 new Vue( data ) avec Vue(data) { new Modele(data) ; new Controleur(modele)) }
    2. solution 2 modele = new Modele(data) ; new Vue( modele ) avec Vue{ new Controleur(modele) }
    3. solution 3 = 1 + 2
      Code pseudojava : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
       
      Vue(Modele modele){
          new Controleur(modele)
      }
      Vue(data) {
         this( new Modele(data) );
      }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Anubshra
    Inscrit en
    Août 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Anubshra

    Informations forums :
    Inscription : Août 2015
    Messages : 3
    Par défaut
    Oki, je pense avoir compris ce que tu m'expliques ainsi que la façon de gérer le modèle d'une JTable selon son utilisation. Du coup, si je saisis bien, dans le cas d'une utilisation généraliste, je pourrais créer la JTable dans le contrôleur et chaque vue pourrait propager son propre modèle au dit contrôleur qui renverrait la JTable créée avec le modèle qui a été transmis... C'est ça ?

    PS : Désolé, j'avais mal lu ta phrase ainsi que ton code, du coup, je n'avais pas remarqué que tu créais le modèle dans Administration.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Anubshra Voir le message
    Oki, je pense avoir compris ce que tu m'expliques ainsi que la façon de gérer le modèle d'une JTable selon son utilisation. Du coup, si je saisis bien, dans le cas d'une utilisation généraliste, je pourrais créer la JTable dans le contrôleur et chaque vue pourrait propager son propre modèle au dit contrôleur qui renverrait la JTable créée avec le modèle qui a été transmis... C'est ça ?
    Non, non : le controleur est créé par la JTable, et pas l'inverse. Je ne sais pas pourquoi tu parles de propagation par ailleurs.
    Dans le MVC :
    Avec Pattern Observer (la vue observe le modèle)
    • Le controleur modifie le modèle
    • La vue écoute le modèle pour se mettre à jour (rafraichir l'affichage)
    • La vue passe par le controleur pour modifier le modèle (lorsqu'on fait de la saisie dans des champs par exemple), et/ou transmet au controleur les interactions (clavier/souris)

    Variante par notification (le controleur notifie la vue) :
    • Le controleur modifie le modèle et averti la vue que le modèle a changé
    • La vue interroge le modèle (lorsqu'elle est averti par le controleur) pour se mettre à jour (rafraichir l'affichage)
    • La vue passe par le controleur pour modifier le modèle (lorsqu'on fait de la saisie dans des champs par exemple), et/ou transmet au controleur les interactions (clavier/souris)

    En aucun cas, le modèle a un lien direct vers le modèle ou la vue. Toutefois, en particulier dans Swing, le controleur étant souvent très spécifique à la vue, c'est la vue qui le créé, déjà parce qu'on a pas besoin du directement controleur en dehors de la vue.
    En aucun cas, le controleur créé la vue : le controleur n'est pas la pour créer la vue, mais pour gérer la vue et le modèle.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Utiliser une méthode non-static dans une autre classe?
    Par trexiic dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 30/09/2015, 18h37
  2. Ajouter lien aux boutons dans une autre classe
    Par marlagourl dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 17/05/2015, 01h57
  3. [POO] utiliser une méthode présente dans une autre classe
    Par arnaudperfect dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2007, 14h23
  4. Utilisation des méthodes de classe dans une autre classe
    Par ChriGoLioNaDor dans le forum C++
    Réponses: 4
    Dernier message: 28/07/2007, 15h10
  5. Réponses: 6
    Dernier message: 12/11/2006, 16h46

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