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

Agents de placement/Fenêtres Java Discussion :

[Debutante] Le layout "null"


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut [Debutante] Le layout "null"
    bonjour, je n'arrive pas a utiliser le layout "null"
    j'ai une classe nommé maframe qui herite de JFrame je veux ajouter un JPanel a un emplacement precis
    50 px du bord gauche
    50 px du bord haut
    de ma JFrame
    et le JPanel doit faire 500*500 la frame elle, fait 700*700
    voici le morceau de code :
    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
    class maFrame extends JFrame implements KeyListener
    {
    private Paneau1 p1=new Paneau1();
    	maFrame(String titre)
    	{
    		super(titre);
    		addKeyListener(this);
    		getContentPane().setLayout(null);
    		p1.setBounds(50,50,500,500);
    		getContentPane().add(p1);
                    setSize(700,700);
    		setLocationRelativeTo(null);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    }
    mon JPanel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Paneau1 extends JPanel
    {
    	public void paintComponent(Graphics g)
    	{
                    setBackground(Color.BLUE);
    		super.paintComponent(g);
    		Graphics2D gd2 = (Graphics2D)g;
    	}
    }
    le probleme, c'est que mon ecran est gris
    merci d'avance pour vos reponses.

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    ben en reprenant ton code, j'obtiens bien un panel bleu sur fond gris.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par herve91
    ben en reprenant ton code, j'obtiens bien un panel bleu sur fond gris.
    IDEM pour moi !

  4. #4
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Le problème avec le layout "null" c'est que les composants changent d'emplacement suivant la résolution. Peut-être que c'est à cause de ta résolution que tu ne vois pas.

    Nas'

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut
    ben en reprenant ton code, j'obtiens bien un panel bleu sur fond gris.
    IDEM pour moi !
    bon ben dans ce cas, alors desolé, ça doit etre une autre partie du code. ( ou un pb avec ma jvm ?
    je vais recommencer, et si je ne vois pas l'effet attendu..( je reposte)
    ( pour le moment c'est pas bien grave je n'ai que ~ 20/25lignes de code )

    Le problème avec le layout "null" c'est que les composants changent d'emplacement suivant la résolution. Peut-être que c'est à cause de ta résolution que tu ne vois pas.
    tu as bien evidement raison, mais je compte disposer mes composants de maniére "originale" / complexe et je ne vois pas d'alternative au layout null. ( c'est aussi parce-que je n'ai pas assez de connaissance )

    ps:
    je prefererrai faire autrement que avec le layout null si je savais faire.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html ?

    Le GridBagLayout est assez complexe mais sinon les autres sont assez simple. L'avantage majeur de cette solution (ie utilisation des Layout) est qu'elle est independante de la resolution.

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par TabrisLeFol
    Le GridBagLayout est assez complexe
    il est vrai que le GridBagLayout n'est pas évident à prendre en main et qu'il ne faut pas avoir peur de se retrouver avec beaucoup de lignes de codes, cependant il permet de faire des choses assez précise.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut
    je vais regarder la page trouvé dans ton lien ( how tu use gridBagLayout )
    mais il me parait bien trop complexe pour arriver a faire exactement ce que je veux.
    je vais lire ce tutoriel, mais ça m'embete de passer trop de temps ( le gridBagLayout ) pour faire la mise en page
    (en même temps, ça vaut peut-etre le coup, ce sera peut-etre un gain de temps pour apres
    )

  9. #9
    Expert confirmé


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Par défaut
    Citation Envoyé par misstinkiete
    je vais regarder la page trouvé dans ton lien ( how tu use gridBagLayout )
    mais il me parait bien trop complexe pour arriver a faire exactement ce que je veux.
    je vais lire ce tutoriel, mais ça m'embete de passer trop de temps ( le gridBagLayout ) pour faire la mise en page
    (en même temps, ça vaut peut-etre le coup, ce sera peut-etre un gain de temps pour apres
    )
    Sinon, il y a toujours le AbsoluteLayout livré avec NetBeans.
    Mais c'est clair que ca vaut le coup d'investir du temps dans le GridBagLayout.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut
    re bonjour,
    j'ai tout recommencé avec le GridBagLayout ( je vois que ce layout a des possibilites enormes ( c'est le plus complet ? ) et donc autant que je m'y habitue des maintenant )
    ce que je vais dire va surement halluciné certaines personnes, mais j'ai l'impression que ça marche comme les tableaux html
    mais je n'arrive quand meme pas a ce que je veux...
    ( pour le moment je fais des test avec des JPanel qui ne contiennent rien . )
    voici mon code :
    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
     
    class FrameTest extends JFrame
    {
    private JPanel ptest=new JPanel();//futur panneau lecture
    private JPanel panneauPreview=new JPanel();//panneau apercu "global"
    	FrameTest(String titre)
    	{
    		super(titre);
    		JPanel b=new JPanel();
    		b.setPreferredSize(new Dimension(50,50));
    		b.setBackground(Color.WHITE);
    		ptest.setBackground(Color.BLUE); 
    		ptest.setPreferredSize(new Dimension(500,500));
    		panneauPreview.setPreferredSize(new Dimension(100,100));
    		panneauPreview.setBackground(Color.red);
    		getContentPane().setLayout(new GridBagLayout());
     
    		GridBagConstraints c=new GrdBagConstraints();
    		c.gridx=0;
    		c.gridy=0;
    		getContentPane().add(ptest,c);
    		c.gridx=1;
    		c.gridy=0;
    		getContentPane().add(panneauPreview,c);
    		c.gridx=1;
    		c.gridy=1;
    		getContentPane().add(b,c);
    	}
     
    public static void main(String[]args)
    {
    		FrameTest t=new FrameTest("test");
    		t.setSize(700,700);
    		t.setLocationRelativeTo(null);
    		t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		t.show();
    }
    }
    ( j'ai mis un fond au JPanel, pour bien les distinguer. )
    c'est presque ce que je veux faire mais je voudrais que le panneau rouge se trouve en haut de la 2ieme colonne et legerement decalé par rapport au panneau bleu
    et sinon, je ne comprend pas pourquoi le panneau blanc est situé tout en bas, il ne devrait pas etre juste en dessous du rouge ?
    j'ai essayé avec c.gridheight=2; ( dans le premier "bloc d'assignation de variable a la contrainte c" )
    mais la, le panneau blanc a disparu completement :80:

    ps:
    peut-etre que la reponse se trouve dans la page hox to use JTable, mais j'ai compris ce que j'ai pu
    ( mon niveau en anglais n'est pas top ( mais j'essaye...))

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut
    alors je suis contente, pour le cadre rouge, j'ai trouvé toute seule ( sauf la marge )
    c.anchor = GridBagConstraints.NORTH;
    mais pour le cadre blanc ça ne marche pas ( il reste tout en bas )
    je continue de chercher

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Sinon utilise public pour ta class et ton constructeur.
    show() doit etre remplacé par setVisible(true)

    Par contre une chose que je n'ai pas compris quand j'ai utilisé Xlint :
    (Je pose une question à l'interieur de ton topic désolé )

    FrameTest.java:4: warning: [serial] serializable class FrameTest has no definition of serialVersionUID
    public class FrameTest extends JFrame

  13. #13
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    bonsoir,
    comme ça pour le paneeau blanc ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
          GridBagConstraints c=new GridBagConstraints(); 
          c.gridx=0; 
          c.gridy=0; 
          c.gridheight=2;
          getContentPane().add(ptest,c); 
          c.gridx=1; 
          c.gridy=0; 
          c.anchor = GridBagConstraints.NORTH;
          c.gridheight=1;
          getContentPane().add(panneauPreview,c); 
          c.gridx=1; 
          c.gridy=1; 
          getContentPane().add(b,c);

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut
    comme ça pour le paneeau blanc ?

    je vois pourquoi. tu as fais "fusionner" la cellule du rouge avec l'ancienne cellule du bleu ce qui fait que le blanc est finalement dans la meme cellule que le rouge.
    c'est ça ?

    sinon reste un dernier truc, c'est la marge du rouge et du blanc par rapport au bleu et du blanc par rapport au rouge.
    ( je ne sais pas si je me suis bien expliqué ? )
    Je pose une question à l'interieur de ton topic Embarassed désolé

    Sinon utilise public pour ta class et ton constructeur.
    show() doit etre remplacé par setVisible(true)
    pourquoi public ? parce-que c'est la classe qui contiens la methode main ?
    ou il y a vraiment crime si je ne le mets pas
    et show() n'est pas deprecated ? si ? ( je vais aller voir quand mm )

    EDIT :
    @Deprecated
    public void show()
    Deprecated. As of JDK version 1.1, replaced by setVisible(boolean).
    et tout le monde l'utilise.

  15. #15
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Non, pas fusionné, simplement le panneau bleu prend 2 cellules en hauteur au lieu d'une. donc tu peux y "coller" à sa droite 2 cellules de hauteur 1

    Pour supprimer la marge, rajoute cette instruction juste avant getContentPane().add(b,c);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     c.anchor = GridBagConstraints.NORTHWEST;
    public ce n'est pas bien grave ici, c'est juste un programme de test.
    show() est deprecated en effet (par le nom, pas par ce qu'elle fait). Il faut utiliser setVisible(true) qui fait la même chose.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut
    public ce n'est pas bien grave ici, c'est juste un programme de test.
    et quest-ce que ça changerais si ce n'etais pas un test ?
    ça ne baisserai pas les performances si ?

    Pour supprimer la marge, rajoute cette instruction juste avant getContentPane().add(b,c);
    au contraire, je veux une marge lol
    si on etais sur le forum html, je dirais "comment mettre un cellpadding de 10"

    -10 px autour du cadre bleu ( donc le cadre rouge et blanc decalé un petit peu sur la droite )
    et
    -10 px du cadre rouge ( le cadre blanc legerement en dessous )
    je comprend mal l'anglais, j'essaye de deviner parmi les constantes utiles de GridBagConstraints, mais rien ne me parais "suspec".
    ( pour le padding )

  17. #17
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    non, rien à voir avec les performances, c'est juste que ta classe n'est pas accessible en dehors du package où elle est définie.
    Pour les marges, regarde l'attribut insets, exemple à placer juste avant getContentPane().add(panneauPreview,c) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      c.insets.bottom = c.insets.top = c.insets.left = c.insets.right = 20;

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Par défaut
    non, rien à voir avec les performances, c'est juste que ta classe n'est pas accessible en dehors du package où elle est définie.
    c'etais une question idiote, je n'avais pas pensé a ça ( puis je n'ai pas encore pris l'habitude de "packager")

    Pour les marges, regarde l'attribut insets,
    d'accrod,j'ai maintenant tous les elements pour comprendre,
    je vais chercher qqch en français( si je trouve ) pour bien "souder" ça, et apres ça devrais aller.
    merci , bonne soirée.

  19. #19
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    bon courage pour la soudure bonne soirée.

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

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