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 :

Fenetre avec 2 style de Layout


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Points : 884
    Points
    884
    Par défaut Fenetre avec 2 style de Layout
    Bonjour,

    Je créé une fenetre avec swing et j'aimerais avoir en premier lieu un affichage selon les borderlayout (North pour le menu, South pour la barre d'information, etc) et j'aimerai qu'au centre (Center) de cet affichage. Je puisse placer des objets comme des boutons, champs, etc avec non pas des borderlayout mais avec des méthodes telles que setbounds(). J'aimerais placer mes boutons comme je le souhaite avec les méthodes setbounds() dans le rectangle rouge !

    Voici mes deux fichiers:

    // Gère l'affichage
    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
    // Importation des librairies nécessaires pour la classe.
    import java.awt.AWTEvent;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Image;
    import java.awt.Toolkit;
     
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
     
    public class ApplicationFrame extends JFrame
    {
    	static final long serialVersionUID = 0;
     
    	BorderLayout borderLayout = new BorderLayout ();
     
    	private JPanel container = null;
     
    	int tailleHauteurFenetre = 800;
    	int tailleLargeurFenetre = 600;
    	int tailleHauteurBouton = 20;
    	int tailleLargeurBouton = 80;
     
    	JMenuBar jMenuBar = new JMenuBar ();
    	JMenu jMenuFichier = new JMenu ();
    	JMenuItem jMenuFichierQuitter = new JMenuItem ();;
    	JMenu jMenuAide = new JMenu ();
    	JMenuItem jMenuAideApropos = new JMenuItem ();
     
    	JButton bouton = new JButton () ;//Création du bouton
     
    	// Constructeur pour l'application.
    	public ApplicationFrame ()
    	{
    		// Permet de déclencher la gestion des événements graphiques.
    		enableEvents (AWTEvent.WINDOW_EVENT_MASK);
     
    		// Méthode JbInit.
    		jbInit ();
    	}
     
    	private JPanel getContainer(){
     
    		// JPanel pour contentPane.
    		container = (JPanel) getContainer ();
     
    		// Disposition dans le JPanel.
    		container.setLayout(null);
     
    		bouton.setBounds(20, 10 , 50, 50);
     
    		return container ;
    	}
     
     
     
    	// Méthode JbInit.
    	private void jbInit ()
    	{
    		setLayout (borderLayout);
     
    		add (statusBar, BorderLayout.SOUTH);
     
    		statusBar.setText ("Acceuil");
     
    		// Taille de la fenêtre.
    		setSize (new Dimension (tailleHauteurFenetre, tailleLargeurFenetre));
     
    		// Titre de la fenêtre.
    		setTitle ("Acceuil");
     
    		Image icone = Toolkit.getDefaultToolkit().getImage("src/img/test.jpg");
    		setIconImage(icone);
     
    		jMenuFichier.getPopupMenu().setLightWeightPopupEnabled(false);
    		jMenuAide.getPopupMenu().setLightWeightPopupEnabled(false);
     
    		jMenuBar.add (jMenuFichier);
    		jMenuBar.add (jMenuAide);
     
    		setJMenuBar (jMenuBar);
     
    		jMenuFichier.setText ("Fichier");
     
    		jMenuFichierQuitter.setText ("Quitter");
     
     
    		jMenuAide.setText ("Aide");
    		jMenuAideApropos.setText ("A propos");
     
    		jMenuFichier.add (jMenuFichierQuitter);				
     
    		jMenuAide.add (jMenuAideApropos);
     
     
    		jMenuBar.setVisible(true);
     
    		bouton.setPreferredSize(new Dimension(125,25)) ;//On lui donne une taille
    		bouton.setText("Cliquer ici") ;//On lui donne un texte
    	}	
     
    	public void addFichierQuitterActionListener (ActionListener listener)
    	{
    		// On ajoute une action au Listener.
    		jMenuFichierQuitter.addActionListener (listener);
    	}
     
     
    	public void addAideAproposActionListener (ActionListener listener)
    	{
    		jMenuAideApropos.addActionListener (listener);
    	}
     
    	// Cette méthode permet de récetpion des évenements généraux.
    	protected void processWindowEvent (WindowEvent event)
    	{
    		super.processWindowEvent (event);
     
    		// Permet de fermer la fenetre si on clique sur la croix.
    		if (event.getID () == WindowEvent.WINDOW_CLOSING)
    		{
    			System.exit (0);
    		}
    	}
    }
    et

    // Gère les traitements.
    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
    // Importation des librairies nécessaires pour la classe.
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.PopupMenu;
    import java.awt.Toolkit;
    import java.awt.Window;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.IOException;
    import java.util.StringTokenizer;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
     
    public class ApplicationPilote
    {
    	private ApplicationFrame applicationFrame;
     
    	public ApplicationPilote ()
    	{
    		// Création de l'encadrement principal de l'application.
    		setApplicationFrame (new ApplicationFrame ());
     
    		// Dimensions de l'écran.
    		Dimension screenSize = Toolkit.getDefaultToolkit ().getScreenSize ();
     
    		// Dimensions de l'encadrement.
    		Dimension frameSize = applicationFrame.getSize ();
     
    		if (frameSize.height > screenSize.height)
    		{
    			frameSize.height = screenSize.height;
    		}
     
    		if (frameSize.width > screenSize.width)
    		{
    			frameSize.width = screenSize.width;
    		}
     
    		// Emplacement de l'encadrement.
    		getApplicationFrame ().setLocation ((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
     
     
    		getApplicationFrame ().addFichierQuitterActionListener (new ActionListener ()
    		{
    			public void actionPerformed (ActionEvent event)
    			{
    				jMenuFichierQuitter_actionPerformed (event);
    			}
    		});
     
     
    		// Activation de l'encadrement.
    		getApplicationFrame ().setVisible (true);
    		// ne pas redimensionné la fenetre
    		getApplicationFrame ().setResizable(false);
    	}
     
    	// Méthode qui permet de retourner ApplicationFrame.
    	public ApplicationFrame getApplicationFrame ()
    	{
    		return applicationFrame;
    	}
     
    	public void setApplicationFrame (ApplicationFrame pApplicationFrame)
    	{
    		applicationFrame = pApplicationFrame;
    	}
     
     
     
    	// Quitter.
    	public void jMenuFichierQuitter_actionPerformed (ActionEvent event)
    	{
    		System.exit (0);
    	}
     
    	// Point d'entrée du programme.
    	public static void main (String args [])
    	{
    		try
    		{
    			// Affecte le "look" de l'application d'après le système d'exploitation.
    			UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName ());
    		}
    		catch (InstantiationException exception)
    		{
    			exception.printStackTrace ();
    		}
    		catch (UnsupportedLookAndFeelException exception)
    		{
    			exception.printStackTrace ();
    		}
    		catch (ClassNotFoundException exception)
    		{
    			exception.printStackTrace ();
    		}
    		catch (IllegalAccessException exception)
    		{
    			exception.printStackTrace ();
    		}
     
    		new ApplicationPilote ();
     
    	}
    }
    Merci !
    Images attachées Images attachées  
    Les cours: XHTML, CSS, PHP, Flash et Javascript
    Expliquez votre problème clairement et pensez à remercier ceux qui vous ont aidé.
    N'oubliez pas : Le tag résolu est la meilleure des satisfactions sur developpez.com
    Aucune question technique par MP.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Pour cela, il te faut faire comme tu fais dans un premier temps: statusBar dans le SOUTH
    Ensuite, tu ajoute un JPanel dans le CENTER.
    Enfin, tu affectes le layout que tu veux a ce JPanel pour positionner tes composants à l'intérieur.
    ATTENTION, tu sembles vouloir positionner tes composants avec des setBounds . Tu vas probablement utiliser un layout null . Je te le déconseille vivement. Il y a de nombreux layoutManager fournits dans le JDK. Tu peux même en trouver d'autres sur le net. Alors pourquoi faire (mal) toi-même ce que des layoutManager font très bien .
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  3. #3
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    tout d'abord tu utiliser le border layout et je te propose de utiliser le centre pour mettre ton panel dans le qu'elle tu veut ajouter des boutton
    utilise alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    content.add(new JPanel()), BorderLayout.CENTER);
    et ensuite je te conseil d'utiliser le layout GridBagLayout dans le panel que tu vas inserer vos composant il est tres simple a utiliser et il te permet de s'eloigner des probleme que peut causer le layout null
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  4. #4
    Membre éclairé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Points : 884
    Points
    884
    Par défaut
    Merci j'ai suivi la procédure du Fifane31 et c'est Ok !

    D'accord je vais me pencher sur les GridLayout !

    C'est vraimetn cooL !
    Les cours: XHTML, CSS, PHP, Flash et Javascript
    Expliquez votre problème clairement et pensez à remercier ceux qui vous ont aidé.
    N'oubliez pas : Le tag résolu est la meilleure des satisfactions sur developpez.com
    Aucune question technique par MP.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Merci Dsphinx
    En layout, je te conseille tout comme anisj1m le GridBagLayout.
    C'est vrai qu'il demande un certain apprentissage, mais il est très puissant.
    Un autre layout (qui n'est pas intégré au JDK mais qui est gratuit) que je trouve très agréable est le ZoneLayout.
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Detection d'une fenetre avec la souris
    Par vivi2701 dans le forum C++
    Réponses: 6
    Dernier message: 09/06/2005, 13h37
  2. Réponses: 2
    Dernier message: 12/11/2004, 17h34
  3. ouvrir plusieurs fenetre avec un lien
    Par demanghonj dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/10/2004, 10h35
  4. Defilement de la fenetre avec JavaScript
    Par black is beautiful dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/09/2004, 10h21

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