Questa sono io in questo momento
Detto ciò...spero che qualcuno mi saprà aiutare. Ho una jtable in cui devo visualizzare delle immagini, una per ogni casella...e fin qui ci siamo. Alla pressione di un tasto queste immagini dovrebbero essere aggiornate, perchè cambiano di volta in volta.
Ovviamente non riesco a fare questa cosa!Al massimo sono riuscita a stampare una nuova jtable con i nuovi risultati...ho provato repaint(), validate(); remove() e removeAll()...e chi + ne ha più ne metta! Non ho capito bene la cosa del modello associato a una jtable...ma penso che sia in quello la soluzione...
Vi posto quello che ho fatto finora
codice:
public void dataTable(){
/*crea una tabella chiamando la funzione sottostante e poi gli assegna un ImageRender personalizzato */
table= createTable();
this.add(new JScrollPane(table));
table.setFillsViewportHeight(true);
table.setRowHeight(90);
//Assegno il cell renderer ad ogni colonna
table.getColumn("1").setCellRenderer(new ImageCellRender());
table.getColumn("2").setCellRenderer(new ImageCellRender());
table.getColumn("3").setCellRenderer(new ImageCellRender());
table.getColumn("4").setCellRenderer(new ImageCellRender());
table.getColumn("5").setCellRenderer(new ImageCellRender());
pane = new JScrollPane(table);
Dimension dim= new Dimension(450,450);
table.setPreferredScrollableViewportSize(dim);
pane.setViewportView(table);
this.add(BorderLayout.CENTER, pane);
}
/*crea tramite una classe ArrayImmagini un array a 2 dimensioni (Object [][] data) contenente i percorsi delle immagini da caricare, nomina le colonne per comodità con i numeri da 1 a 5*/
JTable createTable() {
ArrayImmagini volti= new ArrayImmagini();
data=volti.findPhotos();
String [] columnNames = { "1", "2", "3","4","5" };
return new JTable(data,columnNames);
}
Posto la classe che crea il Render:
codice:
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class ImageCellRender extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof ImageIcon) {
setIcon((ImageIcon) value);
}
return this;
}
}
La chiamata alla creazione della tabella al momento è la seguente e viene fatta da un'ulteriore classe:
codice:
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Start")){
try {
CreateObjDetect oggDetect=new CreateObjDetect(nameFile,pn4,this);
oggDetect.newDetection();
pn2.paintDetectionPhoto();
//qui chiamo la funzione che mi deve creare la tabella...
pn3.dataTable();
} catch (Exception ex) {
pn4.updateInfo("Errore");
}
}
}