BoxLayout

cs_nanaou Messages postés 30 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 21 mars 2010 - 25 avril 2008 à 11:20
cs_nanaou Messages postés 30 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 21 mars 2010 - 25 avril 2008 à 15:10
Bonjour,

j'ai actuellement un petit problème avec un BoxLayout(Y_AXIS) :
j'y ajoute un panel qui s'affiche.
Ensuite, suite à une intéraction de l'utilisateur un tableau doit aparaître. Je l'ajoute donc au panel principal qui contient le BoxLayout.
Cepeandant, le tableau ne se met pas en dessous de l'autre élément (le 1er panel), mais par dessus. De plus le tableau s'affiche un peu à la fois qd on passe le curseur au dessus.

Merci

3 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
25 avril 2008 à 12:02
Personnellement je n'utilise que 3 Layout, BorderLayout, GridLayout et FlowLayout.

Cependant j'ai fait un petit test, et hormis le validate() que j'ai du ajouté, ça a l'air de fonctionner. Montre-nous la partie de ton code qui coince si tu veux bien.

Mon test :

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test1 extends JFrame {

    private static final long serialVersionUID = 1L;

    private JPanel mainPanel;

    private JButton bouton1;
    private JButton bouton2;
    private JButton bouton3;

    private JPanel southPanel;

    public static void main(String... args) {
        new Test1();
    }

    public Test1() {
        super("Test boxlayout");
        setSize(480, 300);
        mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        bouton1 = new JButton("Premier composant");
        bouton2 = new JButton("Composant ajouté");
        bouton3 = new JButton("Ajouter un composant");

        mainPanel.add(bouton1);
        add(mainPanel, BorderLayout.CENTER);

        southPanel = new JPanel();
        southPanel.add(bouton3);
        add(southPanel, BorderLayout.SOUTH);

        setVisible(true);

        bouton3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                mainPanel.add(bouton2);
                mainPanel.validate();
            }
        });
    }

}
0
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
25 avril 2008 à 13:27
Salut,
pourquoi tu l'ajoutes "à la volée". Il serait peut-être plus simple de l'insérer dès le départ en le rendant invisible (setVisible(false)). Ensuite, au moment d'appuyer sur le bouton, tu le rendrais visible.

Personnellement, je le ferai comme cela, ou alors si tu tiens vraiment à l'insérer à la volé, je te suggére d'utiliser le méconnu mais pourtant si puissant SpringLayout (existant en 1.4, pas mal en 1.5, génial en 1.6) qui te permet de manipuler tes composants de façon très puissante.

Voili voilà

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte
0
cs_nanaou Messages postés 30 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 21 mars 2010
25 avril 2008 à 15:10
Salut,

Si je met le tableau après c'est parce qu'on l'utilise uniquement suite au chargement d'un fichier. Le tableau est différent selon le fichier...

Voici mon bout de code :
// Le commentaire correspond à ce que je souhaite vraiment effectuer (BoxLayout vertical)
Box box_up=new Box(BoxLayout.X_AXIS);
box_up.add(this.panel_fichier);
box_up.add(this.panel_elements);   // Celui-ci marche très bien
       
this.panel=(JPanel) this.getContentPane();
this.panel.setLayout(new BorderLayout(10, 10));  // changement de marges ne fait rien (40, 40) idem que (10, 10)
//this.panel.setLayout(new BoxLayout(this.panel, BoxLayout.Y_AXIS));
       
this.panel.add(box_up, BorderLayout.NORTH);
//this.panel.add(box_up);

this.validate();
this.pack();

public maj_tableau() {
        this.panel.add(this.scrollpane, BorderLayout.SOUTH); // se met au centre
        //this.panel.add(this.scrollpane)
        this.panel.revalidate();
}

// Si l'on change les valeurs BorderLayout.NORTH et BorderLayout.SOUTH par exemple en NORTH - CENTER, ..., tout se superpose.

Merci
0
Rejoignez-nous