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 :

Déplacer des boutons avec action souris ou clavier


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Déplacer des boutons avec action souris ou clavier
    je suis débutante en java et je utilise netbeans pour implanter un jeux en java mais je ne trouve une solution pour déplacer des boutons pour former des mots.une solution s-v-p!!!

  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,

    Déjà, il faut préciser ton type d'interface (Swing, JavaFX, SWT, autre ?). Montrer ton code serait intéressant aussi pour voir ce que tu as déjà fais. Et indiquer comment tes boutons devront être déplacé (avec la souris, avec des touches du clavier, avec un algorithme, etc...).
    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
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Le type d'interface est Swing et les boutons devront être déplacés avec la souris ou avec touches du clavier.

  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 plutôt compliqué de déplacer des boutons à la souris parce qu'il y a déjà des comportements de ce type pour un bouton. Il faut absolument que ça soit un bouton, ou ça peut être un JLabel ?
    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
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je peux les changer en jlabel mais comment je peux les déplacer ? Déplacer ou bien échanger les textes entre les boutons

  6. #6
    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
    Déplacer des composants ou échanger les textes, c'est complètement différents. Déjà parce que le déplacement de composants ça suggère de pouvoir placer ces composants là où on veux dans le conteneur, et que ça nécessite de ne pas utiliser de LayoutManager (donc de gérer soi-même le positionnement mais aussi le dimensionnement) ou du moins d'en utiliser un qui permet le placement libre (et il n'y en a pas en standard dans le JDK). Tes composants sont disposés comment ? Librement, ou en grille par exemple ?

    En revanche, échanger les textes avec une manipulation à la souris suggère un système de drag au moins.

    Pour échanger les textes sans parler de la manipulation utilisateur, c'est simple, on peut écrire une méthode comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void echangerTextes(JButton button1, JButton button2) {
       String text = button1.getText();
       button1.setText(button2.getText());
       button2.setText(text );
    }
    Pour un label c'est pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void echangerTextes(JLabel label1, JLabel label2) {
       String text = label1.getText();
       label1.setText(label2.getText());
       label2.setText(text );
    }
    Ensuite, si on utilise des JButton, qui peuvent prendre le focus, le drag va être compliqué, mais pour des labels, c'est simple. Par exemple, avec une disposition standard en grille :

    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
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
    public class Demo { 
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		int nb=5;
     
    		JPanel panel = new JPanel(new GridLayout(0,nb));
    		panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    		MouseListener listener = new MouseListener(panel);
    		for(int i=0; i<nb; i++) {
    			for(int j=0; j<nb; j++) {
    				JLabel label = new JLabel("Texte "+(i+1)+","+(j+1));
    				label.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK), BorderFactory.createEmptyBorder(10, 10,10,10)));
    				panel.add(label);
    				label.addMouseListener(listener);
    				label.addMouseMotionListener(listener);
    				label.setEnabled(true);
    			}
    		}
     
    		frame.add(panel);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
     
    	public static class MouseListener extends MouseAdapter {
     
    		private JLabel source;
    		private JPanel panel;
     
    		public MouseListener(JPanel panel) {
    			this.panel=panel;
    		}
     
    		@Override
    		public void mousePressed(MouseEvent e) { // on appuie un bouton de la souris
    			source = (JLabel)e.getSource(); // on démarre le déplacement 
    		}
     
    		@Override
    		public void mouseReleased(MouseEvent e) { // on relache un bouton de la souris
    			if ( source!=null ) {
    				// on cherche le composant en dessous de la souris
    				e = SwingUtilities.convertMouseEvent((Component)e.getSource(), e, panel); // on convertit l'événement souris dans le panel
    				Component component = panel.findComponentAt(e.getPoint()); // on cherche le composant sous la souris
    				if ( component instanceof JLabel ) { // si c'est un JLabel
    					JLabel target = (JLabel) component;
    					if ( target!=source ) { // si ce n'est pas le JLabel de départ
    						echangerTextes(source, target); // on échange les textes
    					}
    					source = null; // on finit le déplacement
    				}
    			}
    		}
     
    	}
     
    	public static void echangerTextes(JLabel label1, JLabel label2) {
    		   String text = label1.getText();
    		   label1.setText(label2.getText());
    		   label2.setText(text );
    	}
     
    }
    Si tu testes ce code, tu vas voir que ça fonctionne mais qu'on ne sait pas trop ce qu'on fait, parce qu'on ne voit rien qui se passe lorsqu'on bouge la souris avec le bouton enfoncé. On peut utiliser un JLayer pour gérer une image du bouton qui se déplace en même temps que la souris :
    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
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.GridLayout;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JLayer;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
    public class Demo { 
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		int nb=5;
     
    		JPanel panel = new JPanel(new GridLayout(0,nb));
     
    		JLayer<JPanel> layer = new JLayer<JPanel>(panel);
    		layer.getGlassPane().setLayout(null);
    		layer.getGlassPane().setVisible(true);
     
    		panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    		MouseListener listener = new MouseListener(layer, panel);
    		for(int i=0; i<nb; i++) {
    			for(int j=0; j<nb; j++) {
    				JLabel label = new JLabel("Texte "+(i+1)+","+(j+1));
    				label.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK), BorderFactory.createEmptyBorder(10, 10,10,10)));
    				panel.add(label);
    				label.addMouseListener(listener);
    				label.addMouseMotionListener(listener);
    				label.setEnabled(true);
    			}
    		}
     
    		frame.add(layer);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
     
    	public static class MouseListener extends MouseAdapter {
     
    		private JLayer<JPanel> layer;
    		private JPanel panel;
    		private JLabel source;
    		private Point ghostPoint;
    		private JLabel ghost;
     
    		public MouseListener(JLayer<JPanel> layer, JPanel panel) {
    			this.layer=layer;
    			this.panel=panel;
    		}
     
    		@Override
    		public void mousePressed(MouseEvent e) { // on appuie un bouton de la souris
    			source = (JLabel)e.getSource(); // on démarre le déplacement 
    			createGhost(source, SwingUtilities.convertMouseEvent((Component)e.getSource(), e, panel).getPoint());
    		}
     
    		@Override
    		public void mouseReleased(MouseEvent e) { // on relache un bouton de la souris
    			if ( source!=null ) {
    				// on cherche le composant en dessous de la souris
    				e = SwingUtilities.convertMouseEvent((Component)e.getSource(), e, panel); // on convertit l'événement souris dans le panel
    				Component component = panel.findComponentAt(e.getPoint()); // on cherche le composant sous la souris
    				if ( component instanceof JLabel ) { // si c'est un JLabel
    					JLabel target = (JLabel) component;
    					if ( target!=source ) { // si ce n'est pas le JLabel de départ
    						echangerTextes(source, target); // on échange les textes
    					}
    					source = null; // on finit le déplacement
    					layer.getGlassPane().remove(ghost);
    					ghost = null;
    					layer.revalidate();
    					layer.repaint();
    				}
    			}
    		}
     
    		@Override
    		public void mouseDragged(MouseEvent e) { // cet événement est invoquée lorsque la souris se déplace avec un bouton enfoncé
    			if ( ghost!=null ) {
    				e = SwingUtilities.convertMouseEvent((Component)e.getSource(), e, panel); // on convertit l'événement souris dans le panel
    				if ( panel.contains(e.getPoint()) ) {
    					Point point = e.getPoint(); // on bouge le ghost pour qu'il corresponde à la position actuelle de la souris
    					point.x-=ghostPoint.x;
    					point.y-=ghostPoint.y;
    					ghost.setLocation(point);
    					ghost.setVisible(true); // on affiche le ghost dès qu'on est sur le panel
    				}
    				else {
    					ghost.setVisible(false); // on cache le ghost dès qu'on sort
    				}
    			}
    		}
     
    		private void createGhost(JLabel label, Point mousePoint) {
                            // ici on créé une copie fantôme (en rouge) du label qu'on déplace
    			ghost = new JLabel(label.getText());
    			ghost.setForeground(Color.RED); 
    			ghost.setBounds(label.getBounds());
    			ghost.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.RED), BorderFactory.createEmptyBorder(10, 10,10,10)));
    			layer.getGlassPane().add(ghost);
    			layer.revalidate(); // nécessaire pour rafraîchir l'affichage
    			layer.repaint(); // nécessaire pour rafraîchir l'affichage
    			ghostPoint = mousePoint; // le ghostpoint permet de connaître le décalage relatif entre la position du label et la position de la souris
    			ghostPoint.x -= ghost.getLocation().x;
    			ghostPoint.y -= ghost.getLocation().y;
    		}
     
    	}
     
    	public static void echangerTextes(JLabel label1, JLabel label2) {
    		   String text = label1.getText();
    		   label1.setText(label2.getText());
    		   label2.setText(text );
    	}
     
    }
    Pour déplacer avec le clavier c'est autre chose : déjà, le souci c'est qu'il faut savoir c'est ce qu'on veut déplacer et comment. Y a t'il une notion de sélection ?
    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. [PPT-2010] Macro pour remplir une zone de texte avec des boutons d'actions
    Par Invité dans le forum Powerpoint
    Réponses: 2
    Dernier message: 28/01/2017, 06h46
  2. [Débutant] Déplacer des Rectangles avec la souris
    Par Altair evilous dans le forum Développement Windows
    Réponses: 1
    Dernier message: 17/04/2014, 10h34
  3. [C#] Déplacer un composant avec la souris
    Par GéniuS77 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/04/2011, 23h12
  4. Déplacer un panel avec la souris
    Par Harry dans le forum Delphi
    Réponses: 14
    Dernier message: 05/06/2006, 19h18
  5. Déplacer une TImage avec la souris
    Par Ingelishome dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/03/2005, 14h16

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