1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| public class GBLBDemo {
public static void main(String[] args) {
// Une fenêtre avec un GridBagLayout
JFrame frame = new JFrame("Démo");
frame.getContentPane().setLayout(new GridBagLayout());
ActionListener actionListener = new ActionListener() {
private final Border selectionBorder = BorderFactory.createLineBorder(Color.RED,2); // pour marque la sélection
private JComponent current; // le bouton actuellement sélectionné
private Border currentBorder; // la bordure du bouton actuellement sélectionné pour la restaurer
@Override
public void actionPerformed(ActionEvent e) {
if ( e.getSource()==current ) { // si le nouveau bouton est celui qui est actuellement sélectionné, on déselectionne ce bouton
current.setBorder(currentBorder);
current=null;
}
else { // sinon
JComponent button = (JComponent)e.getSource(); // on relève le bouton cliqué
if ( current==null ) { // s'il n'y a pas déjà un bouton sélectionné, le bouton cliqué devient sélectionné
current = button;
currentBorder = button.getBorder(); // on sauvegarde la bordure actuel du bouton pour pouvoir la restaurer
current.setBorder(selectionBorder); // on marque la sélection avec une bordure rouge
}
else { // sinon
GridBagConstraints gbc = ((GridBagLayout)frame.getContentPane().getLayout()).getConstraints(button); // on relève la "position" du bouton cliqué
frame.getContentPane().remove(button); // on retire le bouton cliqué de son container (on l'efface donc)
current.setBorder(currentBorder); // on restaure la bordure du bouton
((GridBagLayout)frame.getContentPane().getLayout()).setConstraints(current, gbc); // on repositionne le bouton sélectionné à l'emplacement du bouton "effacé"
current=null; // on annule la sélection du premier bouton
}
}
}
};
// j'ajoute 100 boutons au content pane, avec le même ActionListener pour tous
Insets insets=new Insets(0, 0, 0, 0);
for(int i=0; i<100; i++) {
JButton button = new JButton(String.valueOf(i+1));
GridBagConstraints gbc = new GridBagConstraints(i%10,i/10,1,1,1,1,GridBagConstraints.CENTER,GridBagConstraints.BOTH,insets,0,0);
button.addActionListener(actionListener);
frame.getContentPane().add(button, gbc);
}
// affichage de la fênêtre
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
} |
Partager