Voici un code d’ajout dynamique de composants avec Swing.
J’utilise les GridBagLayout comme stratégie de placement. Il y a également une partie de fonctionnalités qui n’est pas terminée
par exemple la suppression d’une ligne etc. Mais bon c’est l’ajout dynamique qui était le plus important pour moi et
que je souhaite partager et vous pouvez le télécharger ici.
package test;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class AjoutDynamique implements ActionListener{
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new AjoutDynamique().createAndShowGUI();
}
});
}
private JFrame frame;
private JPanel panel = new JPanel(new GridBagLayout());
private Map<String, Component> dynamicButtons =
new HashMap<String, Component>();
private GridBagConstraints constraints = new GridBagConstraints();
private List<JComponent> fields = new ArrayList<JComponent>();
private JButton button1 = new JButton("Ajouter");
String files = null;
int y=3;
private JPanel btnAppliqueAnnuler() {
//JPanel p = new JPanel(new GridLayout(3, 1));
JPanel p1 = new JPanel();
Box box1 = new Box(BoxLayout.X_AXIS);
box1.add(Box.createHorizontalGlue());
JButton btnAppliquer = new JButton("Appliquer");
box1.add(btnAppliquer);
/**
* Lorsqu'on clique sur le bouton Appliquer
*/
btnAppliquer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAppliquerActionPerformed(evt);
}
});
box1.add(Box.createHorizontalStrut(15));
JButton btnAnnuler = new JButton("Annuler");
/**
* Lorsque clique sur le bouton Annuler
*/
btnAnnuler.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAnnulerActionPerformed(evt);
}
});
box1.add(btnAnnuler);
box1.add(Box.createHorizontalGlue());
p1.add(box1);
p1.setBorder(BorderFactory.createRaisedBevelBorder());
return p1;
}
/**
*
*/
private void btnAppliquerActionPerformed(ActionEvent evt) {
//JOptionPane.showInputDialog("Clique sur Appliquer");
//JOptionPane.showMessageDialog(null," Clique sur Appliquer");
if (nom.getText().isEmpty() || ext.getText().isEmpty() ||
!repertoire.getText().isEmpty()) {
JOptionPane.showMessageDialog(null," Clique sur Appliquer");
}
}
/**
*
*/
private void btnAnnulerActionPerformed(ActionEvent evt) {
JOptionPane.showMessageDialog(null," Clique sur Annuler");
}
private JPanel p = new JPanel();
protected void createAndShowGUI() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
createHeader();
addRowBelow();
constraints.gridx=4;
constraints.gridy=0;
panel.add(button1,constraints);
JButton bouton2 = new JButton("Appliquer");
constraints.gridx=4;
constraints.gridy=1;
panel.add(bouton2,constraints);
p = btnAppliqueAnnuler();
constraints.gridx=4;
constraints.gridy=y+7;
panel.add(p,constraints);
frame = new JFrame("Add Button Dynamically");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(panel));
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
button1.addActionListener(this);
JRootPane root = frame.getRootPane();
root.setDefaultButton(button1);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
}
private void addColumn(String labelText) {
constraints.gridx = fields.size();
constraints.gridy = 1;
panel.add(new JLabel(labelText), constraints);
constraints.gridy=2;
final JTextField field=new JTextField(40);
field.setEditable(false);
panel.add(field,constraints);
fields.add(field);
}
private void createHeader() {
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new java.awt.Insets(10, 10, 10, 10);
constraints.fill = GridBagConstraints.HORIZONTAL;
final JLabel lblTitre = new JLabel("Cliquez sur Ajouter");
lblTitre.setFont(new Font("Arial", 0, 18));
panel.add(lblTitre, constraints);
constraints.gridx=0;
constraints.gridy=1;
final JLabel lblNom = new JLabel("Nom");
lblNom.setFont(new Font("Arial", 0, 11));
panel.add(lblNom, constraints);
constraints.gridx=1;
constraints.gridy=1;
final JLabel lblExt = new JLabel("Ext");
lblExt.setFont(new Font("Arial", 0, 11));
panel.add(lblExt, constraints);
constraints.gridx=2;
constraints.gridy=1;
final JLabel lblRepertoire = new JLabel("Repertoire");
lblRepertoire.setFont(new Font("Arial", 0, 11));
panel.add(lblRepertoire, constraints);
fields.add(panel);
}
private String chooseFolder(java.awt.event.ActionEvent evt) {
String dirName = null;
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
fc.setDialogTitle("Select a Directory");
fc.setApproveButtonText("Valider");
fc.setForeground(new Color(0xFF, 0xFF, 0xFF));
int result = fc.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
dirName = fc.getSelectedFile()
.getAbsolutePath();
} else {
System.out.println("Op?©ration annulÔø?e");
}
return dirName;
}
private JTextField nom;
private JTextField ext;
private JTextField repertoire;
private JButton folder;
private JButton delete;
private JLabel supprimer;
private void addRowBelow() {
int x = 0;
y++;
constraints.gridy=y;
//System.out.println(fields.size());
System.out.println("SIZE addRowBelow : " + fields.size());
for (x=0;x < fields.size();x++) {
constraints.gridx=x;
constraints.insets = new java.awt.Insets(10, 10, 10, 10);
constraints.fill = GridBagConstraints.HORIZONTAL;
nom = new JTextField(10);
nom.setName("nom"+y);
nom.setEditable(true);
panel.add(nom, constraints);
constraints.gridx=x+1;
addComponent(nom.getName(), nom);
ext = new JTextField(6);
ext.setName("ext"+y);
addComponent(ext.getName(), ext);
ext.setEditable(true);
panel.add(ext, constraints);
constraints.gridx=x+2;
repertoire = new JTextField(30);
repertoire.setName("repertoire"+y);
addComponent(repertoire.getName(), repertoire);
ext.setEditable(true);
panel.add(repertoire, constraints);
constraints.gridx=x+3;
folder = new JButton("?");
folder.setName("folder"+y);
addComponent(folder.getName(), folder);
folder.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
String dirName = null;
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
fc.setDialogTitle("Select a Directory");
fc.setApproveButtonText("Valider");
fc.setForeground(new Color(0xFF, 0xFF, 0xFF));
int result = fc.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
repertoire.setText(
fc.getSelectedFile().getAbsolutePath());
} else {
System.out.println("Op?©ration annulÔø?e");
}
}
});
panel.add(folder, constraints);
constraints.gridx=x+4;
delete = new JButton("?");
addComponent(delete.getName(), delete);
delete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("Nom " + delete.getName());
//removeComponent(getY(delete.getName()));
if (!repertoire.equals("") || !repertoire.equals(null)) {
JOptionPane.showMessageDialog(null,delete.getName(),"Error",
JOptionPane.ERROR_MESSAGE);
}
else{
JOptionPane.showMessageDialog(null, delete.getName());
}
}
});
panel.add(delete, constraints);
constraints.gridx=x+5;
supprimer = new JLabel("Supprimer");
supprimer.setName("supprimer"+y);
addComponent(supprimer.getName(), supprimer);
panel.add(supprimer, constraints);
constraints.gridx=x;
constraints.gridy=y;
panel.add(new JSeparator(), constraints);
}
}
public void addComponent(String name, Component comp) {
dynamicButtons.put(name, comp);
panel.invalidate();
}
public void actionPerformed(ActionEvent ae){
if("Ajouter".equals(ae.getActionCommand())) {
addRowBelow();
frame.pack();
frame.setLocationRelativeTo(null);
}
}
}
