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 :

Problème de dimension d'un bouton


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut Problème de dimension d'un bouton
    Bonjour

    Débutant en java swing, actuellement, je cherche à mettre en place une interface graphique de type messagerie instantanée...

    Je suis actuellement entrain de créer ma fenêtre d'accueil...

    C'est la que mon problème survient... En effet, je n'arrive pas à redimensionner mes JButton, mes JTextField et mon ImageIcon...

    J'ai essayé en faisant un setBounds(...);
    Mais la taille ne change pas, peut-être que je l'ai mal placé!

    La méthode est-elle bonne?
    Sinon connaissez vous d'autres méthodes efficaces pour ce genre de problème?

    Voici mon code, classe Fenetre :
    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
    164
    165
    166
    167
    import javax.swing.*;
     
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    public class Fenetre extends JFrame {
     
    	private static final long serialVersionUID = 1L;
    	private Fond maFenetre;
    	private Image fondecran;
    	private ImageIcon imagePerso;
    	private JMenuBar mainMenu;
    	private JMenu menuFichier, sousMenu, menuContact, menuAction, envoyer,menuOutils, menuAide;
    	private JMenuItem deconnexion, enligne, oqp, abs, drdm, autel, pm, ald;
    	private JMenuItem fermer;
    	private JMenuItem ajoutCont, suprCont;
    	private JMenuItem envtext, envson, envvid, pseudo, pp, map, mip, guide,envMail, credits;
    	private JToolBar menuTool;
    	private JButton bouton;
    	private JTextField pseudonyme, frasePerso;
     
    	public Fenetre() {
    		setTitle(" aMsky ");
    		setIconImage(Toolkit.getDefaultToolkit().getImage("src/communication.jpg"));
    		setLocationRelativeTo(null);
    		setExtendedState(this.MAXIMIZED_BOTH);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		initialisation();
    	}
     
    	private void initialisation() {
    		mainMenu = new JMenuBar();
    		menuFichier = new JMenu(" Fichier ");
    		sousMenu = new JMenu("Statut");
    		mainMenu.add(menuFichier);
    		deconnexion = new JMenuItem("Se déconnecter");
    		enligne = new JMenuItem("En ligne");
    		oqp = new JMenuItem("Occupé(e)");
    		abs = new JMenuItem("Absent(e)");
    		drdm = new JMenuItem("De retour dans une minute");
    		autel = new JMenuItem("Au téléphone");
    		pm = new JMenuItem("Parti(e) manger");
    		ald = new JMenuItem("A la douche");
     
    		fermer = new JMenuItem("Quitter aMsky");
    		fermer.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				System.exit(0);
    			}
    		});
     
    		menuFichier.add(deconnexion);
    		menuFichier.add(sousMenu);
    		sousMenu.add(enligne);
    		sousMenu.add(oqp);
    		sousMenu.add(abs);
    		sousMenu.add(drdm);
    		sousMenu.add(autel);
    		sousMenu.add(pm);
    		sousMenu.add(ald);
    		menuFichier.add(fermer);
     
    		menuContact = new JMenu(" Contacts ");
    		mainMenu.add(menuContact);
    		ajoutCont = new JMenuItem("Ajouter un contact");
    		suprCont = new JMenuItem("Supprimer un contact");
    		menuContact.add(ajoutCont);
    		menuContact.add(suprCont);
     
    		menuAction = new JMenu(" Actions ");
    		JMenuItem envoyerFichier = new JMenuItem("Envoyer un message instantanné");
    		envoyer = new JMenu("Envoyer");
    		JMenuItem dcw = new JMenuItem("Démarrer une conversion webcam");
    		mainMenu.add(menuAction);
    		envtext = new JMenuItem("Envoyer un fichier texte");
    		envson = new JMenuItem("Envoyer un fichier audio");
    		envvid = new JMenuItem("Envoyer un fichier video");
    		menuAction.add(envoyerFichier);
    		menuAction.add(envoyer);
    		envoyer.add(envtext);
    		envoyer.add(envson);
    		envoyer.add(envvid);
    		menuAction.add(dcw);
     
    		menuOutils = new JMenu(" Outils ");
    		pseudo = new JMenuItem("Modifier son pseudo");
    		pp = new JMenuItem("Modifier sa phrase perso");
    		map = new JMenuItem("Modifier l'arrière plan");
    		mip = new JMenuItem("Modifier l'image perso");
    		mainMenu.add(menuOutils);
    		menuOutils.add(pseudo);
    		menuOutils.add(pp);
    		menuOutils.add(map);
    		menuOutils.add(mip);
     
    		menuAide = new JMenu(" ? ");
    		guide = new JMenuItem("Guide utilisateur");
    		envMail = new JMenuItem("Contacter l'équipe de développement");
    		credits = new JMenuItem("A propos de ");
    		mainMenu.add(menuAide);
    		menuAide.add(guide);
    		menuAide.add(envMail);
    		menuAide.add(credits);
     
    		setJMenuBar(mainMenu);
    		setContentPane(construirePanel());
    	}
     
    	private Fond construirePanel() {
    		maFenetre = new Fond();
    		maFenetre.setLayout(new BorderLayout());
    		fondecran = Toolkit.getDefaultToolkit().getImage("src/aMsky.jpg");
     
    		imagePerso = new ImageIcon("src/icone-aMsky.jpg");
    		ImageIcon imgPerso = new ImageIcon(imagePerso.getImage().getScaledInstance(125, 135, Image.SCALE_DEFAULT));
    		bouton = new JButton(imgPerso);
    		pseudonyme = new JTextField("Jason");
    		frasePerso = new JTextField("Salut les copains!!");
    		menuTool = new JToolBar();
    		menuTool.setLayout(new GridLayout(1,15));
    		menuTool.add(bouton);
    		menuTool.add(pseudonyme);
    		menuTool.add(frasePerso);
     
    		maFenetre.add(menuTool, BorderLayout.PAGE_START);
    		maFenetre=this.connexionbdd();
    		maFenetre.setFond(fondecran);
    		maFenetre.setVisible(true);
    		return maFenetre;
    	}
     
    private Fond connexionbdd(){	
    		String user = "root";
    		String mdp = "jason";
    		String pilote = "com.mysql.jdbc.Driver";
     
    		try{
    			Class.forName(pilote);
    			Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/amsky",user,mdp);
    			Statement s = c.createStatement();
    			ResultSet r = s.executeQuery("SELECT login from contact where contact.contact='gsanz'");
     
    			while(r.next()){
    				final String log = r.getString("login");
    				JButton bouton=new JButton(log);
    				bouton.setBounds(50,50,50,50);
    				bouton.addActionListener(new ActionListener (){
     
    					public void actionPerformed(ActionEvent evt){
    						Fenetre f = new Fenetre();
    						f.show();
    					}
    				});
    				//bouton.setBounds(200,200,250,250);
    				maFenetre.add(bouton);
    						}				
    		}catch (Exception e){
    			System.out.println(e);
            }
    		return maFenetre;
    	}
    }
    classe Fond :
    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
    import javax.swing.*;
    import java.awt.*;
     
     
    public class Fond extends JPanel{
     
    	private static final long serialVersionUID=1;
    	private Image image;
     
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(this.image,0,0,this);
    	}
     
    	public void setFond(Image image){
    		this.image=image;
    	}
    }
    classe aMsky :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class aMsky {
        	public static void main(String args[]){		
        		javax.swing.SwingUtilities.invokeLater(new Runnable(){// Pour lancer l'application on utilise la méthode run()
        			public void run(){
        				Fenetre f=new Fenetre();
        				f.setVisible(true);
    				}
    	   	 	});
        	}
    }

    Merci pour votre attention

    A bientot

  2. #2
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Le Layout par défaut est le FlowLayout, avec lequel tu ne peux pas fixer de valeurs par un setBounds. Donc si tu ne spécifies pas de Layout, alors, le flowLayout est mis en place, et donc l'appel à la méthode setBounds ne fait rien.

    Il te faut : Soit enlever tout Layout par la méthode setLayout(null);
    L'avantage étant que tu places tes composants facilement, l'inconvénient que si l'utilisateur redimensionne la fenêtre, les proportionnalités ne sont pas conservées.
    Soit, utiliser un autre type de Layout. Tu as des Layout dans la librairie standard : BorderLayout, GridBagLayout.... ou bien, tu utilises un JAR externe qui s'occupe exprès de ça : personnellement, j'aime bien TableLayout, simple, et relativement efficace. Tu l'ajoutes dans le classpath pour pouvoir utiliser ses méthodes.

    Voilà, j'espère t'avoir aidé, bonne soirée ;-)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    Citation Envoyé par Balbuzard Voir le message
    Le Layout par défaut est le FlowLayout, avec lequel tu ne peux pas fixer de valeurs par un setBounds. Donc si tu ne spécifies pas de Layout, alors, le flowLayout est mis en place, et donc l'appel à la méthode setBounds ne fait rien.

    Il te faut : Soit enlever tout Layout par la méthode setLayout(null);
    L'avantage étant que tu places tes composants facilement, l'inconvénient que si l'utilisateur redimensionne la fenêtre, les proportionnalités ne sont pas conservées.
    Soit, utiliser un autre type de Layout. Tu as des Layout dans la librairie standard : BorderLayout, GridBagLayout.... ou bien, tu utilises un JAR externe qui s'occupe exprès de ça : personnellement, j'aime bien TableLayout, simple, et relativement efficace. Tu l'ajoutes dans le classpath pour pouvoir utiliser ses méthodes.

    Voilà, j'espère t'avoir aidé, bonne soirée ;-)
    Merci pour ton attention et ta réponse qui m'a beaucoup aidée

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    A noter toutefois que le NullLayout est en général une mauvaise pratique et pose des problèmes de portabilité des interfaces.

    Il vaut mieux gérer les boutons via un layout avancé de type FormLayout, MigLayout ou encore GridbagLayout.

    Ensuite tout dépend de l'interface que tu veux réaliser.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut Problème de placement de bouton(GridBagLayout)
    Bonjour,

    A présent je cherche à placer mes différents boutons dans ma fenêtre à l'aide d'un GridBagLayout.
    Le problème est que je ne sais pas comment on l'utilise et que je n'ai pas trouvé de réponse pertinente sur le web.

    Merci de votre aide

    @+

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

Discussions similaires

  1. Problème avec Goto pour un bouton de menu
    Par Klotian dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2006, 17h49
  2. Réponses: 1
    Dernier message: 09/05/2006, 15h02
  3. Réponses: 11
    Dernier message: 03/03/2006, 15h36
  4. [Débutant] Problème pour écrire dans un bouton
    Par Paulinho dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 06/01/2006, 11h45
  5. [GridBagLayout] Problème de dimension pour un JScrollPane
    Par cmoa59 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 26/07/2005, 11h58

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