Ok, ho fatto qualche prova con questa jOpenDocument. Come unica dipendenza (Maven) ho usato:
<dependency>
<groupId>org.jopendocument</groupId>
<artifactId>jOpenDocument</artifactId>
<version>1.3</version>
</dependency>
L'esempio è il seguente. Provalo, genera un piccolo sheet con nomi di persone fittizie dove (con molta fantasia ) ho colorato di azzurro le righe dei maschi e di rosa le righe delle femmine. Ovviamente è solo un esempio basilare e non molto object-oriented. Si può maneggiare ovviamente meglio in altri modi più appropriati.
Nota che l'esempio non ha nulla a che fare direttamente con Swing/JTable, se non per il fatto tecnico che MutableTableModel deriva dal AbstractTableModel di Swing (scelta forse non molto felice..).
Quindi come vedi il colore di background c'è. C'è sicuramente anche supporto per altri aspetti visuali ma non ho indagato oltre per ora ...
import java.awt.Color;
import java.io.File;
import org.jopendocument.dom.spreadsheet.MutableCell;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SheetTableModel.MutableTableModel;
import org.jopendocument.dom.spreadsheet.SpreadSheet;
public class ProvaJOpenDocument {
public static void main(String[] args) throws Exception {
Persona[] persone = {
new Persona("Mario", "Rossi", 1984, Sesso.MASCHIO),
new Persona("Lucia", "Verdi", 1954, Sesso.FEMMINA),
new Persona("Roberto", "Bianchi", 1966, Sesso.MASCHIO),
new Persona("Giacomo", "Neri", 1954, Sesso.MASCHIO),
new Persona("Anna", "Marrone", 1975, Sesso.FEMMINA),
new Persona("Marco", "Viola", 1961, Sesso.MASCHIO),
};
SpreadSheet spreadSheet = SpreadSheet.create(1, 1, 1);
Sheet sheet = spreadSheet.getFirstSheet();
sheet.setName("Persone");
sheet.ensureRowCount(persone.length);
sheet.ensureColumnCount(4);
MutableTableModel<SpreadSheet> tm = sheet.getMutableTableModel(0, 0);
for (int r = 0; r < persone.length; r++) {
Persona persona = persone[r];
Color background = persona.getSesso() == Sesso.MASCHIO
? new Color(135, 206, 250) : new Color(255, 192, 203);
setCella(tm.getCellAt(r, 0), persona.getNome(), background);
setCella(tm.getCellAt(r, 1), persona.getCognome(), background);
setCella(tm.getCellAt(r, 2), persona.getAnnoNascita(), background);
setCella(tm.getCellAt(r, 3), persona.getSesso(), background);
}
spreadSheet.saveAs(new File("C:\\blabla\\persone.ods"));
}
private static void setCella(MutableCell<SpreadSheet> cell, Object valore, Color background) {
cell.setValue(valore);
cell.setBackgroundColor(background);
}
}
class Persona {
private String nome;
private String cognome;
private int annoNascita;
private Sesso sesso;
public Persona(String nome, String cognome, int annoNascita, Sesso sesso) {
this.nome = nome;
this.cognome = cognome;
this.annoNascita = annoNascita;
this.sesso = sesso;
}
// metodi setter e/o getter (omessi per brevità!) ....
}
enum Sesso {
MASCHIO, FEMMINA
}