Salut,
Pour le gridlayout, le problème est qu'il défini une grille (d'ou son nom), et comme il n'y a pas de notion de span, tu ne peux pas mettre un label sur toute une ligne, avec une grille de 4 colonnes.
Dans ce genre de cas, il faut que tu repères les différentes zones de ton affichage, et que tu détermines comment découper ton interface en plusieurs sous parties, correspondant à des layout managers existants (à défaut de créer ton propre layout manager). Il y a le GridBagLayout qui te permettrait de faire ce genre d'interface "complexe" en un seul layout manager, mais il est souvent plus simple, de découper en plusieurs parties utilisant des layout managers plus simples, surtout quand tu débutes.
Pour la calculatrice indiquée, on voit 4 parties, d'après moi :
- Le label en haut
- les chiffres en bas à droite en grille 3x3
- Le bouton C à gauche, au dessus des opérations (à part parce que taille non identique)
- Les opérations, en une colonne, en bas à gauche
La partie 3 et 4 peuvent êtres regroupées dans un composant. Appelons la B.
La partie 2 et B peuvent être regroupées dans un composant. Appelons la A.
La partie 1 et A peuvent être regroupées dans un composant, qui est ton composant panneau.
Chaque partie aura un layout manager simple, adapté :
- Grille avec GridLayout
- Box/BoxLayout pour des grilles d'une ligne ou d'une colonne
- BorderLayout pour des composants avec une partie centrale et des composants autour
Le choix de chaque manager se fait en fonction de la disposition des composants, et comment la taille des composants doit être prise en compte (est-ce le composant lui même qui décide, son parent, le layout manager... chaque composant ayant une taille maxi, mini et préférentielle).
Tu as regardé ce tutoriel ?
Pour l'autre question, setBounds c'est pour donner une taille à un composant (quand on utilise pas les layout managers). Pour setBorder, tout est expliqué ici. Dans ton programme, simplement :
label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
Partager