Algo que eu planejava a algum tempo é oferecer um modo onde seja possivel ter colunas em uma JTable com valores agregados como, soma, média, menor, maior e etc.., foi com essa intenção que criei as AggregateFunctions. O model que faz isso para as colunas está pronto, e é o AggregateModel.
Mas encontrei alguns desafios não triviais para fazer isso funcionar, não existe nem na JTable nem no JScrollPane um modo de adicionar um footer, a unica maneira que pensei para resolver isso é criando uma classe que estende JPanel que tenha um JScrollPane com uma “Main Table” e outro com uma linha fixa com o model de agregação dos valores da tabela principal. Então para encapsular essa “gambiarra” criei a classe JTableView, com ela é possivel utilizar esse novo recurso. Mas ainda tem alguns poucos defeitos que ainda não consegui resolver (uma contribuição se alguem souber é bem vinda ^^).

Para utiliza-la, é necessario instanciar o JTableView com um modelo qualquer e depois as funções que serão utilizadas nas colunas do footer.

Como exemplo, usaremos o modelo “Person”  para exibir alguns valores e aplicaremos algumas funções nas colunas.

Person.java

public class Person {
	@Resolvable(colName = "Name")
	private String name;
	@Resolvable(colName = "Age")
	private int age;
	@Resolvable(colName = "Live")
	private boolean live;

	public Person(String name, int age, boolean live) {
		this.name = name;
		this.age = age;
		this.live = live;
	}
}

Com isso criamos o modelo e adicionamos alguns dados.
PS:Para quem não sabe como funciona o ObjectTableModel pode ver aqui.

		ObjectTableModel model = new ObjectTableModel(
				new AnnotationResolver(Person.class), "name,age,live");

		model.setEditableDefault(true);

		model.add(new Person("A", 10, true));
		model.add(new Person("B", 20, true));
		model.add(new Person("C", 30, false));
		model.add(new Person("D", 40, true));
		model.add(new Person("E", 50, true));

PS: JTableView não funciona apenas com o ObjectTableModel, mas ele é o mais simples de ser utilizado em qualquer ocasião.

Agora com o modelo pronto, só precisamos criar o JTableView e colocar as funções de agregações que queremos na tabela.

		JTableView view = new JTableView(model);
                //Os indices são 0 based.
		view.getFooterModel().setFunction(0, new FuncConcat("-"));
		view.getFooterModel().setFunction(1, new FuncSum());

PS: Para saber como funciona a API de AggregateFunctions, ver em CollectionsUtils.

Não é necessario ter uma função para todas as colunas, estas ficaram em branco.

Agora só basta colocar esse componente em algum lugar, como em um JFrame e exibi-lo.

		JFrame frame = new JFrame();
		frame.getContentPane().add(view);

		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);

Com isso temos o seguinte resultado.

Ao alteramos os valores na tabela principal o novo resultado é calculado no footer.

Como eu disse, este componente não está perfeito, ele tem suporte a re-alocação de colunas, caso voce esteja clicando no header da main table e arrastando a coluna para outro lugar.

Mas ela não tem suporte para resize de colunas, o resultado se esticar algumas colunas vai ser bem estranho, se alguém souber como resolver será muito interessante para o projeto.
Então ainda não indico utilizar este componente a não ser em caso que deixem a tabela fixada e sem suporte para mudar o tamanho das colunas, uma versão melhorada desse componente vai ser liberado assim que for arrumado estes erros pendentes.