web-dev-qa-db-fra.com

Puis-je ajouter un composant à une cellule de grille spécifique lorsqu'un GridLayout est utilisé?

Lorsque je mets GridLayout sur JPanel puis que j'ajoute quelque chose, il est ajouté par la suite dans "l'ordre des textes" (de gauche à droite, de haut en bas). Mais je veux ajouter un élément à une cellule spécifique (dans la i-ème ligne de la j-ème colonne). C'est possible?

25
Roman

Non, vous ne pouvez pas ajouter de composants dans une cellule spécifique. Ce que vous pouvez faire est d'ajouter des objets JPanel vides et de conserver leurs références dans un tableau, puis de leur ajouter des composants dans l'ordre que vous souhaitez.

Quelque chose comme:

int i = 3;
int j = 4;
JPanel[][] panelHolder = new JPanel[i][j];    
setLayout(new GridLayout(i,j));

for(int m = 0; m < i; m++) {
   for(int n = 0; n < j; n++) {
      panelHolder[m][n] = new JPanel();
      add(panelHolder[m][n]);
   }
}

Plus tard, vous pouvez ajouter directement à l'un des objets JPanel:

panelHolder[2][3].add(new JButton("Foo"));
44
Rob Heiser

Oui

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(2,2,1,1));
    JButton component= new JButton("Component");
    panel.add(component, 0,0 );

Créez votre panneau et définissez sa disposition.
nouveau GridLayout (numberOfRows, numberOfColums, HorizontalGap, VerticleGap)

(nouveau GridLayout (2,2,1,1)) => ici, je veux 2 lignes, 2 colonnes,
- s'il y a des écarts horizontaux (HGap), ils doivent être de 1px (1 unité)
- Je veux aussi la même chose pour les espaces verticaux donc je fais la même chose que les espaces verticaux (VGap). soit 1 unité
-- Dans ce cas; lacunes => espacement/marges/rembourrage - dans ce sens.

Créez vos composants et ajoutez-les au panneau
- (composant, 0,0) => 0,0 est la ligne et la colonne .. (comme un tableau 2D). @row 0 & @column 0 ou à l'intersection de la ligne 0 et de la colonne 0
spécifiez où va votre composant en plaçant la ligne et la colonne où il doit aller.
chaque cellule a un emplacement == [ligne] [colonne]

Ou vous pouvez le faire sans hgaps et vgaps:

    JPanel panel = new JPanel();        
    panel.setLayout(new GridLayout(2,2));
    JButton component= new JButton("Component");
    panel.add(component, 0,0 );
5
TimeTrax