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 :

Clic droit sur un tableau


Sujet :

Java

  1. #1
    Membre habitué Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Points : 166
    Points
    166
    Par défaut Clic droit sur un tableau
    Bonjour à tous et à toutes, je cherche à savoir comment on fait un clic droit sur un tableau pour que ça me donne un menu contextuel
    si vous pouvez mexpliquez ou me diriger vers des cours.
    jai cherché mais je ne trouve pas exactement ce que je cherche

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Comment ça un clic-droit sur un tableau ? Un tableau est une structure de données. Tu veux peut-être parler de JTable Swing, ou d'un autre composant graphique de même type pour une autre API d'IHM, pour lequel une notion de clic-droit a un sens ?
    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 habitué Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Points : 166
    Points
    166
    Par défaut jTable
    En fait c'est un jTable. Jai des jTextfield que je renseigne et quand je valide par un bouton ajouter, une ligne automatiquement a ajouté à ma jTable.
    maintenant je veux faire en sorte que si l'utilisateur veut supprimer ou modifier une ligne denregistrement qu'il puisse faire un clic droit sur la ligne en question et choisir modifier ou supprimer
    merci

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est un menu popup alors que tu veux. Donc utiliser la classe JPopUpMenu en Swing. Le menu peut être affecté à la table via setComponentPopupMenu(). En revanche, la sélection n'est pas gérée automatiquement : il faut donc tester la position de la souris lorsque le menu s'ouvre (PopupMenuListener), détecter si la ligne correspondante dans la JTable est sélectionnée ou pas, et changer la sélection en fonction. Il faut également gérer l'activation des menus en fonction de la sélection dans la JTable pour que les menus soit grisés ou pas en fonction de la sélection (unique, multiple, vide).

    POC :
    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
    public class JTablePopup {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JTable table = createTable();
    		JScrollPane scrollPane = new JScrollPane(table);
    		scrollPane.setRowHeaderView(table.getTableHeader());
     
    		frame.add(table.getTableHeader(), BorderLayout.NORTH);
    		frame.add(scrollPane);
     
    		frame.setSize(600, 400);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	public static JTable createTable() {
     
    		DefaultTableModel model = new DefaultTableModel(fill(new Object[20][4]),new String[]{"col1","col2","col3","col4"});
    		JTable table = new JTable(model);
    		table.setFillsViewportHeight(true);
     
    		// affectation d'un menu popup à la table
    		table.setComponentPopupMenu(createPopUpMenu(table, model));
     
    		return table;
     
    	}
     
    	private static Object[][] fill(Object[][] data) {
    		Random random = new Random();
    		for(int n=0; n<data.length ; n++) {
    			Object[] line = data[n];
    			for(int i=0; i<line.length; i++) {
    				line[i]=i==0?"Line "+(n+1):random.nextInt(100);
    			}
    		}
    		return data;
    	}
     
    	private static JPopupMenu createPopUpMenu(JTable table, DefaultTableModel model) {
    		JPopupMenu popupMenu = new JPopupMenu();
     
    		JMenuItem menuModify = createMenuItem("Modifier",e-> modifySelection(table, model));
    		popupMenu.add(menuModify);
    		JMenuItem menuRemove = createMenuItem("Supprimer",e-> removeSelection(table, model));
    		popupMenu.add(menuRemove);
     
    		 menuModify.setEnabled(false);
    		 menuRemove.setEnabled(false);
     
                    // gère l'activation des menus en fonction de la selection
    		table.getSelectionModel().addListSelectionListener(e-> {
    			     if ( !e.getValueIsAdjusting() ) {
    			    	 switch ( table.getSelectedRowCount() ) {
    			    	 case 0: // sélection vide : aucun menu disponible
    			    		 menuModify.setEnabled(false);
    			    		 menuRemove.setEnabled(false);
    			    		 break;
    			    	 case 1: // sélection unique : on peut modifier ou supprimer
    			    		 menuModify.setEnabled(true);
    			    		 menuRemove.setEnabled(true);
    			    		 break;
    			    	 default: // sinon, sélection multiple : on peut supprimer, mais pas modifier (on peut modifier en multiple si le formulaire est adapté : on peut ici modifier le libéllé du menu pour qu'il affiche "Modification" ou "Modication multiple", ou autre en fonction de différents critères...)
    			    		 menuModify.setEnabled(false);
    			    		 menuRemove.setEnabled(true);
    			    		 break;
    			    	 }
    			     }
    			}
    		);
     
    		popupMenu.add(menuModify);
    		popupMenu.add(menuRemove);
     
                    // gère la sélection automatique (sans perte de la sélection faite normalement, en particulier la multiple sélection)
    		popupMenu.addPopupMenuListener(new PopupMenuListener() {
     
    			@Override
    			public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    				int row = table.rowAtPoint(table.getMousePosition());
    				if ( row >= 0 && row < table.getRowCount() && !table.isRowSelected(row) ) {
    			        table.setRowSelectionInterval(row, row);
    				}
    			}
     
    			@Override
    			public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
    			}
     
    			@Override
    			public void popupMenuCanceled(PopupMenuEvent e) {
    			}
    		});
     
    		return popupMenu;
    	}
     
    	private static void modifySelection(JTable table, DefaultTableModel model) {
    		int selectedRow = table.getSelectedRow();
    		JOptionPane.showConfirmDialog(table, "Modifier ligne " + (selectedRow+1)); 
    	}
     
    	private static void removeSelection(JTable table, DefaultTableModel model) {
    		int rowShift=0;
    		for(int selectedRow : table.getSelectedRows() ) {
    			model.removeRow(selectedRow-rowShift);
    			rowShift++; // à chaque fois qu'on supprime une ligne, on décale l'index des lignes suivantes d'autant que de lignes supprimées
    		}
    	}
     
     
    	private static JMenuItem createMenuItem(String label, ActionListener actionListener) {
    		JMenuItem menu = new JMenuItem(label);
    		menu.addActionListener(actionListener);
    		return menu;
    	}
     
     
    }
    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.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Comme pour tous les composant swing, tu as addMouseListener pour récupérer les évènement souris. La méthode rowAtPoint de JTable te permettra de convertir les coordonées du curseur souris en numéro de ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    table.addMouseListener( new MouseAdapter()
    {
        public void mouseReleased(MouseEvent e)
        {
            if (e.isPopupTrigger())
            {
                JTable source = (JTable)e.getSource();
                int row = source.rowAtPoint( e.getPoint() );
                afficherMaPopup(e.getComponent(), e.getX(), e.getY(), row);
            }
        }
    });

  6. #6
    Membre habitué Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Points : 166
    Points
    166
    Par défaut
    merci les gas, pour vos réponses je vais essayer tout ça et je vous tiens au courant

  7. #7
    Membre habitué Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Points : 166
    Points
    166
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		
    		JMenuItem menuModify = createMenuItem("Modifier",e-> modifySelection(table, model));
    }
    j'ai une erreur sugnalée à ce niveau:
    cannot find variable e

  8. #8
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par happyboon Voir le message
    j'ai une erreur sugnalée à ce niveau:
    cannot find variable e
    Tu es en Java 7 et c'est du code Java 8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JMenuItem menuModify = createMenuItem("Modifier",new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                  modifySelection(table, model);
            }
    });
    Et il faut passer toutes les variables utilisées (table, model) en final.
    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.

  9. #9
    Membre habitué Avatar de happyboon
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 192
    Points : 166
    Points
    166
    Par défaut
    Merci, je me remets au boulot ....

Discussions similaires

  1. Clic droit sur un wxButton ?
    Par Eldered dans le forum wxWidgets
    Réponses: 3
    Dernier message: 13/07/2006, 15h22
  2. clic droit sur image
    Par iamhere dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/06/2006, 16h15
  3. [MFC] clic droit sur une listbox ?
    Par julien.nasser dans le forum MFC
    Réponses: 1
    Dernier message: 07/06/2006, 15h53
  4. Clic droit sur un TTabControl
    Par FredericB dans le forum C++Builder
    Réponses: 5
    Dernier message: 04/04/2006, 20h53
  5. [C#] Clic droit sur un TreeView
    Par whilecoyote dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/03/2005, 16h03

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