Les espaces au-dessus, à gauche et entre les composants seront de 2 pixels.
import javax.swing.*; import java.awt.*; class Fixe extends JFrame{ JButton[] clavier=new JButton[12]; JTextField ecran; Fixe(){ super(); setTitle("Fixe"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(null); ecran=new JTextField(); ecran.setFont(new Font(Font.SANS_SERIF,Font.PLAIN,34)); ecran.setBackground(Color.white); ecran.setEditable(false); ecran.setBounds(2,2,289,80); getContentPane().add(ecran); for (int i=0;i<9;i++){ clavier[i]=new JButton(new Integer(i+1).toString()); } clavier[9]=new JButton("0"); clavier[10]=new JButton(","); clavier[11]=new JButton("C"); for (int i=0;i<12;i++){ clavier[i].setFont(new Font(Font.SANS_SERIF,Font.BOLD,34)); clavier[i].setBounds(2+97*(i%3), 84+(i/3)*97, 95, 95); getContentPane().add(clavier[i]); } setBounds(400,400,300,500); setResizable(false); setVisible(true); } public static void main(String[] args) { new Fixe(); } }Les modifications apportées par-rapport à Base.java sont en violet.
La ligne
ecran.setBounds(2,2,289,80);place le JTextField à 2 pixels du bord gauche, 2 pixels du haut, avec une largeur de 289 pixels et une hauteur de 80 pixels.
Il est pratique d'utiliser la division entière de i par 3 pour positionner les boutons sur 3 colonnes comme sur un pavé numérique, en fonction de leur index i :
On multiplie par 97 pour trouver la position du bouton (95 pixels de largeur / hauteur +2 pixels de marge). On ajoute le décalage nécessaire pour que la première rangée soit 2 pixels en dessous du JTextField, et la première colonne à 2 pixels du bord gauche. Donc :
clavier[i].setBounds(2+97*(i%3), 84+(i/3)*97, 95, 95);
Les composants ne se redimensionnant pas lorsque la fenêtre est redimensionnée, il est préférable de rendre la fenêtre non redimensionnable (setResizable(false);) afin de ne pas voir apparaître des espaces vides.
Les dimensions de la fenêtre ont été ajustées pour parfaire le résultat. Comme les dimensions optimales dépendent, en plus de la taille du contenu, de la taille des bordures et de la barre de titre, les dimensions choisies ne seront pas forcément les meilleures pour toutes les versions de Java et tous les systèmes.
C'est un défaut du positionnement absolu qui va à l'encontre du but dans lequel Java a été initialement été conçu, que les programmes Java puissent être exécutés sans modification sous divers systèmes d'exploitation.
C'est pourquoi le positionnement absolu est à priori déconseillé - mais il peut sans problème être utilisé pour des programmes à déploiement limité comme ceux écrits en ISN .
Pour éviter les problèmes liés au dimensionnement absolu, et pour s'éviter de calculer les positions ou tailles de tous les composants , le dimensionnement et la mise en place des composants peuvent (et doivent de préférence) être effectués à l'aide de layout managers.