Dans l'applet, vous pouvez mettre un nom dans la première colonne et des entiers dans les colonnes des notes ; vous devez voir apparaître la moyenne des notes dans la dernière colonne.
La classe javax.swing.JTable permet de construire des tableurs. Cette classe offre beaucoup de possibilités dont notre exemple vous donne un aperçu.
L'exemple a pour objectif, comme on le voit sur l'applet, de consigner des notes d'élève dans une table et d'en calculer automatiquement la moyenne. Une note absente ou non conforme au format d'un entier n'est pas prise en considération dans la moyenne.
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.event.TableModelListener;
import javax.swing.event.TableModelEvent;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.text.DecimalFormat;
public class Tableur extends JFrame implements TableModelListener {
JTable table;
DefaultTableModel tableur;
public Tableur() {
tableur = new DefaultTableModel();
tableur.addColumn("Nom");
tableur.addColumn("Note1");
tableur.addColumn("Note2");
tableur.addColumn("Note3");
tableur.addColumn("Moyenne");
tableur.setRowCount(10);
table = new JTable(tableur);
table.setPreferredScrollableViewportSize(new Dimension(300, 200));
JScrollPane avecAsc = new JScrollPane(table);
add(new JScrollPane(table), BorderLayout.CENTER);
tableur.addTableModelListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(200, 300);
pack(); setVisible(true);
}
public void tableChanged(TableModelEvent e) {
if (e.getType() != TableModelEvent.UPDATE) return;
int colonne = e.getColumn();
int nbColonnes = tableur.getColumnCount();
if ((colonne == 0) || (colonne == nbColonnes - 1)) return;
int ligne = e.getFirstRow();
int i, somme = 0, nb = 0;
String chaine;
DecimalFormat forme = new DecimalFormat();
forme.setMaximumFractionDigits(2);
for (i = 1; i < nbColonnes - 1; i++) {
try {
chaine = (String)tableur.getValueAt(ligne, i);
if (chaine != null) {
somme += Integer.parseInt(chaine);
nb++;
}
}
catch(NumberFormatException exc) {
System.out.println("Les notes doivent etre des entiers");
}
}
if (nb > 0)
tableur.setValueAt(forme.format((double)somme/nb), ligne, nbColonnes - 1);
else tableur.setValueAt("", ligne, nbColonnes - 1);
}
}
class EssaiTableur {
public static void main(String[] arg) {
new Tableur();
}
}
Vous pouvez disposer de :