# Redimensionnement auto des composants - Java



## fredosx (12 Juin 2004)

Hello,

Qq'un sait comment on parametre les composants graphiques afin qu'il se redimensionnent automatiquement des que la taille de la fenetre est modifiée.

merci par avance
@+


----------



## molgow (12 Juin 2004)

Tu programmes avec quoi ?! Swing ? Si c'est ça, c'est la méthode _pack_ sur ton _JFrame_ qui permet de tout redimensionner comme il faut (si je ne me trompe pas).


----------



## fredosx (12 Juin 2004)

oui avec swing.
J'utilise bien la methode pack() de JFrame, mais la JScrollView ne se redimmensionne pas lorsque j'augmente ou je reduit la taille de la fenetre..


----------



## molgow (12 Juin 2004)

Hmm.. tu peux expliquer en gros où se trouve ton JScrollView ? avec quel layout ?


----------



## fredosx (12 Juin 2004)

Pour l'instant je n'ai pas créé de layout...
J'ai en résumé une JFrame qui contient un JPane qui contient un JScrollPane qui contient une JTable.
En fait je viens de commencer un projet que je souhaitais developper en java et je suis bloqué sur ce souci depuis qqs jours...
J'ai une bonne connaissance en cocoa (objective-C) et avec interface builder c'est tres facile de regler le comportement des composants lorsque la taille de la fenetre (ou vue) est modifiée.
J'aimerai pouvoir gerer aussi aisément le comportement de tous mes composants swing. Je pensais trouver mon bonheur dans la classe JComponent puisque tous les objets graphiques heritent de cette classe, mais je n'y ai trouvé aucune methode repondant a mon probleme.

Mais c pt etre une propriété des borderLayout... je vais consulter la doc.


----------



## molgow (12 Juin 2004)

Difficile de dire en fait comme ça. Ca me semble étrange comme problème. Je verrais bien un problème de layout mais comme je n'ai pas ton code sous les yeux.. je peux pas dire.

Je t'ai fait un petit exemple avec NetBeans... ça pourra peut-être t'aider à comprendre d'où vient ton problème :


```
/*
 * FredosxExample.java
 *
 * Created on 12 juin 2004, 21:32
 */
public class FredosxExample extends javax.swing.JFrame {
    
    /** Creates new form FredosxExample */
    public FredosxExample() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"Ceci est un example."}
            },
            new String [] {
                "Column"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        jTabbedPane1.addTab("Example", jScrollPane1);

        getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);

        pack();
    }
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new FredosxExample().show();
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration
    
}
```


----------



## Einbert (15 Juin 2004)

Le layout par défaut qui est utilisé par le JFrame (et tous les JComponent par ailleurs) est le BorderLayout, qui a mon sens n'est pas vraiment génial pour faire de jolies choses  (un JPanel par exemple utilise lui le FlowLayout par défaut). Personnellement, je te conseillerais d'utiliser le GridBagLayout, qui est certes le plus compliqué à utiliser, mais avec 2-3 exemples, on a vite compris. Pour te faire une idée, je te conseille de jeter un oeil à http://java.sun.com/docs/books/tutorial/uiswing/TOC.html#layout ... Tu as des exemples et c'est bien expliqué. Autrement, le livre Swing de chez O'Reilly (qui est un sacré gros volume soit dit en passant) est vraiment bon et complet, donc jeter un oeil auprès de ta bibliothèque de ton école en vaut la peine  .

Je me rappelle qu'à l'époque, j'avais un peu le même problème que toi. Si tu veux utiliser une manière graphique pour réaliser ta GUI, utilise NetBeans ou Eclipse, qui sont deux bons IDE pour Java (et gratuit bien entendu  ).

++


----------



## tatouille (15 Juin 2004)

oui je dois avoir ca dans les back j'ai arreté swing depuis
je trouve ca degueux layout

java.awt.Container
-------------->javax.swing.JComponent
----------------------->javax.swing.JScrollPane

de se que je me souviens rapido c'est le container qui contient le compenent
qui doit etre pack()

public static void main(String[] args) {

              JFrame frame = new JFrame("SwingApplication");
              SwingApplication app = new SwingApplication();
              Component contents = app.createComponents();
              frame.getContentPane().add(contents, BorderLayout.CENTER);
              frame.pack();

}

par example faire ca avec swing est une grosse connerie car tu te retrouves bloqué

window JFrame
----------view Jpanel ----------->pack
--------------component JscrollPane

mais je suis plus sur la j'ai pas la doc java

regarde dans ta doc a swingx c'est forcement notifié


----------



## molgow (15 Juin 2004)

Einbert a dit:
			
		

> Si tu veux utiliser une manière graphique pour réaliser ta GUI, utilise NetBeans ou Eclipse, qui sont deux bons IDE pour Java (et gratuit bien entendu  ).



Sur Mac, seulement NetBeans permet de réaliser ses GUI Swing de manière graphique.


----------

