[Swing] Déplacement de JButton
Résolu
Manoa1
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Manoa1 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Manoa1 Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour !
Je fais depuis quelque temps un projet en java et j'ai un problème. Je déplace un bouton en le glissant avec le souri ! Pendant le déplacement du bouton, les coordonnées du bouton est recueilli dans deux variables (tableau par ce que dans le vrai projet j'utilise beaucoup de bouton) et ces deux variable qu'on utilise pour l'affiché sur la fenêtre. J'utilise une boite de dialogue, avec le menu « Pôle », pour modifier les coordonnées de ce bouton. Ce boite de dialogue comporte deux JTextField, ces deux JTextField c'est pour entrer les valeurs des coordonnées du bouton, quand on ouvre le boite de dialogue les valeurs des deux jTextField est la position actuel du bouton ! Et voici mon problème : quand on modifie les valeurs dans ces champs, en renvoyant les valeurs des deux dans les variables de la coordonnée du bouton, la position de la ne change pas alors que c'est le principal but de cette boite de dialogue.
voici ci-dessous les codes de chaque classe:
et voici le code de la oite de dialogue:
et je vous remercie en avance!
Je fais depuis quelque temps un projet en java et j'ai un problème. Je déplace un bouton en le glissant avec le souri ! Pendant le déplacement du bouton, les coordonnées du bouton est recueilli dans deux variables (tableau par ce que dans le vrai projet j'utilise beaucoup de bouton) et ces deux variable qu'on utilise pour l'affiché sur la fenêtre. J'utilise une boite de dialogue, avec le menu « Pôle », pour modifier les coordonnées de ce bouton. Ce boite de dialogue comporte deux JTextField, ces deux JTextField c'est pour entrer les valeurs des coordonnées du bouton, quand on ouvre le boite de dialogue les valeurs des deux jTextField est la position actuel du bouton ! Et voici mon problème : quand on modifie les valeurs dans ces champs, en renvoyant les valeurs des deux dans les variables de la coordonnée du bouton, la position de la ne change pas alors que c'est le principal but de cette boite de dialogue.
voici ci-dessous les codes de chaque classe:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Fenetre extends JFrame{ private static final long serialVersionUID = 1L; private JMenuBar barreMenus; private JMenu Poles; private JMenuItem ModifPole; public Fenetre(){ //fenetre principale this.setTitle("Carte des Pôles et des Zéros interactive"); this.setSize(800,600); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); Container cont= getContentPane(); cont.setLayout(null); //AJOUT DU BARRE DE MENU barreMenus = new JMenuBar(); setJMenuBar(barreMenus); //Poles Poles = new JMenu("Pôles"); barreMenus.add(Poles); ModifPole = new JMenuItem("Modifier un Pôle"); ModifPole.setToolTipText("Pour modifier un pôle dans le plan complexe"); Poles.add(ModifPole); //POLES****** // MODIFIER POLE************************** ModifPole.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0){ DModifPole zd = new DModifPole(null, "Modification d'un pôle", true); } }); this.setContentPane(new Panneau()); this.setVisible(true); repaint(); } public static void main(String[] args) { // TODO Auto-generated method stub @SuppressWarnings("unused") Fenetre fen = new Fenetre(); } }
import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.*; public class Panneau extends JPanel{ public final JButton Pole1=new JButton(""); public final JButton Pole2=new JButton(""); public static int PoleR[]= new int[20]; public static int PoleI[] = new int[20]; public static final int XMIN=35, XMAX=385, YMIN=50, YMAX=400, SIZE=10, DELTA=70; private static final long serialVersionUID = 1L; private int x; public Panneau(){ // INITIALISATION DU VALEUR DE CHAQUE POLE eET DE ZEROs PoleR[1]=254; PoleI[1]=127; Pole1.setBounds(PoleR[1],PoleI[1],SIZE,SIZE); Pole1.setBackground(Color.RED); //DEPLACEMENT DES PÖLE Pole1.addMouseMotionListener(new MouseMotionListener(){ private int dx,dy; public void mouseDragged(MouseEvent e) { PoleR[1]=Pole1.getX()+e.getX()-dx; PoleI[1]=Pole1.getY()+e.getY()-dy; if (PoleR[1]>=XMIN && PoleR[1]<XMAX && PoleI[1]>=YMIN && PoleI[1]<YMAX) Pole1.setLocation(PoleR[1], PoleI[1]); } public void mouseMoved(MouseEvent e) { dx = e.getX(); dy = e.getY(); } }); repaint(); setLayout(null); add(Pole1); add(Pole2); } public void paintComponent(Graphics g){ super.paintComponent(g); x=0; for (int i=1; i<=((15)*5)-4; i++) { g.setColor(Color.gray.brighter()); g.drawLine(35,50+x,385,x+50); g.drawLine(x+35,50,35+x,400); x=x+5; } repaint(); } }
et voici le code de la oite de dialogue:
import java.awt.*; import java.awt.event.*; import javax.swing.*; @SuppressWarnings("serial") public class DModifPole extends JDialog implements ActionListener{ //FANAMBARANA IREO COMPOSANT REHETRA public static JTextField TX = new JTextField("0", 10); public static JTextField TY = new JTextField("0", 10); private JLabel LX = new JLabel("X:"); private JLabel LY = new JLabel("Y:"); private JButton BModifPole = new JButton("OK"); @SuppressWarnings("deprecation") public DModifPole(){} public DModifPole(JFrame parent, String title, boolean modal){ super(parent, title, modal); this.setSize(270,160); //INTERFACE LISTENER //LES jtEXTfIELD****** Container contenu= getContentPane(); contenu.setLayout(null); TX.setBounds(150,45, 80, 20); TY.setBounds(150,70, 80, 20); contenu.add(TX); contenu.add(TY); /////LES JLABELLLLLL*********** LX.setBounds(80,45, 100, 20); contenu.add((Component) LX); LY.setBounds(80,70, 100, 20); contenu.add((Component) LY); ///LE BNOUTON DE SOUMISSION********** BModifPole.setBounds(95,100,80,25); contenu.add(BModifPole); BModifPole.addActionListener( this); this.setLocationRelativeTo(null); this.setResizable(false); TX.setText(String.valueOf(Panneau.PoleR[1])); TY.setText(String.valueOf(Panneau.PoleI[1])); this.setVisible(true); } public void actionPerformed(ActionEvent e){ Panneau.PoleR[1]=Integer.valueOf(TX.getText()); Panneau.PoleI[1]=Integer.valueOf(TY.getText()); this.dispose(); } }
et je vous remercie en avance!
A voir également:
- [Swing] Déplacement de JButton
- Historique déplacement google - Guide
- Deplacer barre de tache windows 11 - Guide
- Déplacement souris inversé - Guide
- Souris bug déplacement ✓ - Forum souris / Touchpad
- Impossible d'utiliser l'outil déplacement car la couche de destination est masquée. ✓ - Forum Photoshop
4 réponses
Ton code est mal fait, les objets sont mis à l'arrachée dans l'interface graphique en espérant que ça passe, alors vu que j'ai déjà travaillé à plusieurs reprises sur ton code, j'arrive à m'y retrouver, mais un oeil neuf sera totalement perdu.
Il faut que tu repenses totalement ton code, et au minimum que tu créés une classe pour les boutons qui se déplacent... parce que tes tableaux dupliquent inutilement des informations que l'on peut obtenir directement par les boutons.
Sinon, L'actionPerformed de DModifPole modifie le tableau mais ça ne suffit pas car il fait surtout penser à déplacer le bouton, ce que tu ne fais pas !
Vu ton code actuel, tu dois faire un lien dans ton menu avec l'interface existante, par exemple en passant en paramètre l'objet Panneau :
final Panneau panneau = new Panneau();
Dans Fenetre :
Dans DModifPole (qui n'implémente plus ActionListener)
Remarque : Ton programme rame énormément à cause d'une boucle infinie dans Panneau. Le paintComponent appelle repaint(), qui lui même appelle paintComponent. Conséquence : le quadrillage est constamment en train de se redessiner.
Supprimes donc l'instruction repaint() dans le paintComponent, elle ne sert à rien, et ça évitera au processeur de tourner à fond...
Il faut que tu repenses totalement ton code, et au minimum que tu créés une classe pour les boutons qui se déplacent... parce que tes tableaux dupliquent inutilement des informations que l'on peut obtenir directement par les boutons.
Sinon, L'actionPerformed de DModifPole modifie le tableau mais ça ne suffit pas car il fait surtout penser à déplacer le bouton, ce que tu ne fais pas !
Vu ton code actuel, tu dois faire un lien dans ton menu avec l'interface existante, par exemple en passant en paramètre l'objet Panneau :
final Panneau panneau = new Panneau();
Dans Fenetre :
ModifPole.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { new DModifPole(Fenetre.this, "Modification d'un pôle", true, panneau); } }); this.setContentPane(panneau);
Dans DModifPole (qui n'implémente plus ActionListener)
public DModifPole(Fenetre parent, String title, boolean modal, final Panneau panneau) { ... BModifPole.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Panneau.PoleR[1]=Integer.valueOf(TX.getText()); Panneau.PoleI[1]=Integer.valueOf(TY.getText()); panneau.Pole1.setLocation(Panneau.PoleR[1],Panneau.PoleI[1]); DModifPole.this.dispose(); } }); ... }
Remarque : Ton programme rame énormément à cause d'une boucle infinie dans Panneau. Le paintComponent appelle repaint(), qui lui même appelle paintComponent. Conséquence : le quadrillage est constamment en train de se redessiner.
Supprimes donc l'instruction repaint() dans le paintComponent, elle ne sert à rien, et ça évitera au processeur de tourner à fond...
j'ai essayé ce que vous m'avez suggéré est il y a encore une erreur sur la classe DMODIFPOLE:
panneau.Pole1.setLocation(Panneau.PoleR[1],Panneau.PoleI[1]);
dans cette instruction, eclipse indique toujours une erreur alors que j'ai suivi a la lettre votre suggestion! j'aimerais que vous jette un coup d'oeil a ce problème! merci d'avance!
panneau.Pole1.setLocation(Panneau.PoleR[1],Panneau.PoleI[1]);
dans cette instruction, eclipse indique toujours une erreur alors que j'ai suivi a la lettre votre suggestion! j'aimerais que vous jette un coup d'oeil a ce problème! merci d'avance!
"il y a encore une erreur sur la classe" : LAQUELLE ???
À chaque fois que tu as un message d'erreur donne le... parce que moi avec les modifications que j'ai décrite hier, je n'en ai aucune, alors comment je la devine ?
À chaque fois que tu as un message d'erreur donne le... parce que moi avec les modifications que j'ai décrite hier, je n'en ai aucune, alors comment je la devine ?