Comment gérer son interface graphique ligne par ligne

Description

Voici une classe dérivée de JPanel qui repose sur les Box et les Vector.
Elle permet de gérer une interface graphique ligne à ligne sans se prendre la tête
avec les LayoutManager !!!
Voici un petit exemple de son utilisation :

Source / Exemple :


/*************************************************
*

  • Classe Main qui lance l'application
*
                                                                                                    • /
import java.awt.Dimension; import java.awt.*; /**
  • Classe qui est le point d'entrée de l'application
  • C'est elle qui va lancer la fenêtre de convertisseur
  • @author Duss
  • /
public class Main { public static void main(String[] args) { // Déclaration d'un objet de type Convertisseur // et instanciation de ce même objet Base fen = new Base(); // Affectation d'une taille fen.setSize(450,410); // Affichage fen.setVisible(true); // Définition du titre fen.setTitle("Convertisseur"); // On récupère la taille de l'écran (la résolution) // et on place notre fenêtre au milieu Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); fen.setLocation((screen.width - fen.getSize().width)/2,(screen.height - fen.getSize().height)/2); } } /************************************************* *
  • Classe Base dérivée de JFrame sur laquelle on va placer
  • nos composants
*
                                                                                                    • /
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; /**
  • @author Duss
  • /
public class Base extends JFrame { // Déclaration de l'objet TabLine private TabLine _tab; // Constructeur public Base() { // Création d'un TabLine de 2 lignes // avec un espace de 2 pixels entre les lignes _tab = new TabLine(2,2); // Ajout du TabLine au fond de la fenetre getContentPane().add(_tab); // Création d'un bouton JButton but = new JButton("ok"); // Implémentation de actionPerformed à la volée // dans une classe anonyme (j'ai honte mais je suis pressé !) but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { // Ajout de 2 lignes supplémentaires _tab.addLines(2); // Ajout de 2 composants sur ces lignes _tab.put(new JLabel("1"),3); _tab.put(new JLabel("2"),4); } }); // Ajout de comosants sur les lignes 1 et 2 _tab.put(new JTextField(),1); _tab.put(but,2); } } /************************************************* *
  • Classe TabLine qui permet la gestion ligne par ligne
*
                                                                                                    • /
import java.awt.Component; import java.awt.GridLayout; import java.util.Vector; import javax.swing.*; /**
  • Classe permettant de gérer son
  • interface graphique ligne / ligne
  • @author Duss
  • /
public class TabLine extends JPanel { private int _nbLignes, _space; private Vector _lignes; private Box _box; /**
  • Constructeur
  • @param nbLignes Le nombre de ligne
  • @param space L'espace horizontal (en pixels) entre les lignes
  • /
public TabLine(int nbLignes, int space) { _nbLignes = nbLignes; _space = space; // On créé une box verticale _box = Box.createVerticalBox(); // On passe en grid avec une seule case // pour qu'elle prenne toute la place setLayout(new GridLayout(1,1)); // On ajoute notre box add(_box); // Initialistation d'un Vector _lignes = new Vector(1); for (int i = 0 ; i < _nbLignes ; i++) { // Ajout des lignes dans le vector _lignes.addElement(Box.createHorizontalBox()); // Puis dans le box _box.add((Box)_lignes.get(i)); // Ajout des espaces _box.add(Box.createVerticalStrut(_space)); } } /**
  • Méthode permettant d'ajouter un
  • composant sur une ligne
  • @param comp Composant
  • @param ligne La ligne
  • /
public void put(Component comp,int ligne) { ((Box)_lignes.get(ligne -1)).add(comp); } /**
  • Méthode pour insérer un espace
  • entre deux composants sur
  • une ligne
  • @param ligne La ligne
  • @param space La valeur en pixels de l'espace
  • /
public void insertHSpace(int ligne,int space) { ((Box)_lignes.get(ligne -1)).add(Box.createHorizontalStrut(space)); } /**
  • Méthode pour insérer des lignes
  • à la fin de la page
*
  • @param nb Le nombre de lignes
  • /
public void addLines(int nb) { int taille = _lignes.size(); for (int i = 0 ; i< nb ;i++) { _lignes.addElement(Box.createHorizontalBox()); _box.add((Box)_lignes.get(taille + i)); _box.add(Box.createVerticalStrut(_space)); } revalidate(); } }

Conclusion :


Voilà, le mieux est de mettre chaque classe dans un fichier java qui porte son nom.
J'ai essayé de commenté au maximum.

Si on met un seul composant, il se centre tout seul sur la ligne.
Si on ne met pas de composant sur une ligne, elle n'apparait pas.
Si vous voulez 'sauter une ligne' , insérez un espace horizontal sur la ligne.

Bon code

Duss

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.