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

 Java Discussion :

Identifier un bouton pour en définir l'action


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut Identifier un bouton pour en définir l'action
    Bonjour tout le monde.

    J'aimerai définir l'action de différents boutons mais dans des conditions bien particulières pour rester polie.
    Je dois travailler sur un "code à trous" d'on je ne suis pas l'auteur.
    Il me faut le comprendre ce code mais surtout comprendre ou l'auteur voulait en venir.
    Et c'est bien là que se trouve mon problème.

    Voila donc le résultat du code mis en place:

    Nom : 7-newVehiculeOK.png
Affichages : 917
Taille : 29,0 Ko

    Sachant que la JTable à en fait plusieurs lignes.
    Pour ce qui est de mon travail, je dois définir l'action du bouton "DETAIL".
    Voici la classe dans laquelle ce trouve le trou que je doit compléter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class ViewDetailVehiculeListener extends ButtonListener {
    	private Integer id;
     
    	public void actionPerformed(ActionEvent e) {
    		/*
     
    		Vous devez définir comment afficher le détail d'un véhicule
    		ceci dans un popup personnalisée
     
    		*/
            }
    }
    Cette classe est utiliser ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tab = new JTable(data, title);
     
    if (table.equals(DatabaseTable.VEHICULE)) {
    	tab.getColumn("ACTION").setCellRenderer(new ButtonRenderer("SUPPRIMER"));
    	tab.getColumn("ACTION").setCellEditor(new ButtonEditor(new JCheckBox(), "SUPPRIMER"));
    	tab.getColumn("DETAIL").setCellRenderer(new ButtonRenderer("DETAIL"));
    	tab.getColumn("DETAIL").setCellEditor(new ButtonEditor(new JCheckBox(), "DETAIL", new ViewDetailVehiculeListener()));
    }
    "data" et "title" sont définis plus haut dans le code depuis une base de données.
    Je vous donne BouttonRenderer et BouttonEditor :

    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
    package fr.ocr.ihm;
     
    import java.awt.Component;
     
    import javax.swing.JButton;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
     
    public class ButtonRenderer extends JButton implements TableCellRenderer {
     
    	private String nom;
     
    	public ButtonRenderer(String title) {
    		nom = title;
    	}
     
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean isFocus, int row, int col) {
    		setText(nom);
    		// On retourne notre bouton
    		return this;
    	}
    }
    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
    package fr.ocr.ihm;
     
    import java.awt.Component;
     
    import javax.swing.DefaultCellEditor;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JTable;
     
    import fr.ocr.ihm.listener.ButtonListener;
    /**
     * Classe permettant de définir les comportements
     * des boutons du JTable 
     * @author cysboy
     */
    public class ButtonEditor extends DefaultCellEditor {
     
    	protected JButton button;
    	private boolean isPushed;
    	private ButtonListener bListener;
    	private String title = "";
     
    	// Constructeur avec une CheckBox
    	public ButtonEditor(JCheckBox checkBox, String t) {
    		// Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		// On crée à nouveau un bouton
    		button = new JButton();
    		button.setOpaque(true);
    		// On lui attribue un listener
    		bListener = new ButtonListener();
    		button.addActionListener(bListener);
    		title = t;
    	}
     
    	public ButtonEditor(JCheckBox checkBox, String t, ButtonListener l) {
    		// Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    		// On crée à nouveau un bouton
    		button = new JButton();
    		button.setOpaque(true);
    		// On lui attribue un listener
    		bListener = l;
    		button.addActionListener(bListener);
    		title = t;
    	}
     
    	public Component getTableCellEditorComponent(JTable table, Object value,
    			boolean isSelected, int row, int column) {
    		// On précise le numéro de ligne à notre listener
    		bListener.setRow(row);
    		// Idem pour le numéro de colonne
    		bListener.setColumn(column);
    		// On passe aussi le tableau en paramètre pour des actions potentielles
    		bListener.setTable(table);
     
    		// On réaffecte le libellé au bouton
    		button.setText(title);
    		// On renvoie le bouton
    		return button;
    	}
     
    }
    Mon problème est que je ne comprend pas comment on peut savoir sur le bouton de quel ligne j'ai bien pu appuyer.
    Peut être que je dois utiliser getTableCellEditorComponent() quelque part mais je ne voit même pas quoi en faire.
    Merci de votre aide.

  2. #2
    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 : 56
    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,

    Si tu regardes le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public Component getTableCellEditorComponent(JTable table, Object value,
    			boolean isSelected, int row, int column) {
    		// On précise le numéro de ligne à notre listener
    		bListener.setRow(row);
    		// Idem pour le numéro de colonne
    		bListener.setColumn(column);
    		// On passe aussi le tableau en paramètre pour des actions potentielles
    		bListener.setTable(table);
     
    		// On réaffecte le libellé au bouton
    		button.setText(title);
    		// On renvoie le bouton
    		return button;
    	}
    on voit qu'on injecte dans le ButtonListener table, ligne et colonne concernée. Il y a donc probablement des méthodes ou des attributs qui permettent de récupérer ces informations, que tu pourras exploiter dans la méthode actionPerformed de ViewDetailVehiculeListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class ViewDetailVehiculeListener extends ButtonListener {
    	private Integer id;
     
    	public void actionPerformed(ActionEvent e) {
    		/*
     
    		Vous devez définir comment afficher le détail d'un véhicule
    		ceci dans un popup personnalisée
     
    		*/
            }
    }
    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.

  3. #3
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Tu à parfaitement compris mon problème.
    En fait c'est à moi d'utiliser cette méthode et d'injecter ces éléments.
    Mais j'ai aucune idée de où et comment.

  4. #4
    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 : 56
    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
    Et bien si la classe fr.ocr.ihm.listener.ButtonListener est bien celle qu'on trouve ici, on voit qu'on a trois attributs protected :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected int column, row, id;
    Dans ViewDetailVehiculeListener, dans la méthode actionPerformed, tu peux exploiter ces variables, et tu as un exemple dans la méthode actionPerformed de ButtonListener (qui sert à supprimer), par exemple, pour récupérer l'id : id = Integer.valueOf(jTable.getValueAt(row, 4).toString());.
    Bon,
    • ça aurait été plus logique de déclarer id locale et non membre,
    • pourquoi convertir en String et parser vers int au lieu de juste caster
    • des constantes pour les numéros de colonnes éviteront des problèmes
    • un SwingWorker au lieu d'un thread serait plus propre
    • Et le rafraîchissement de la vue c'est du grand n'importe quoi
    • et displayDialog(), **soupir**, pareil...du grand portninwak...

    mais pour le principe on y est.
    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.

Discussions similaires

  1. [XL-2010] Identifier le bouton au clic pour action
    Par CrasherSEP dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 11/08/2017, 09h19
  2. Réponses: 4
    Dernier message: 15/12/2016, 19h19
  3. plusieurs boutons pour une même action
    Par SweetBlueMelody dans le forum jQuery
    Réponses: 4
    Dernier message: 16/02/2012, 15h53
  4. un bouton pour trois actions
    Par tamalkasi dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/08/2010, 18h26
  5. [Mail] Un seul bouton pour 2 actions
    Par nixax dans le forum Langage
    Réponses: 10
    Dernier message: 08/12/2006, 18h21

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