Allora provo a far vedere ciò che ho fatto io e che purtroppo non funxiona....
codice:
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class CustomTable extends JTable implements Runnable{
/**
*
*/
private static final long serialVersionUID = 6844426758162170422L;
private DefaultTableModel modello; // Sarà un riferimento al TableModel
public CustomTable(DefaultTableModel tableModel) {
super(tableModel);
modello = tableModel;
}
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component rendererComponent = super.prepareRenderer(renderer, row, column);
if (!isCellSelected(row, column)) {
// Se la cella NON E' selezionata, verifico
// se sussiste la condizione per colorarla
// Inizialmente la cella sarà BIANCA
rendererComponent.setBackground( Color.WHITE );
if (true) {
System.out.println("stampo in blue");
// La condizione è verificata: coloro la cella di ROSSO
rendererComponent.setBackground( Color.BLUE );
}else if(false){
System.out.println("stampo in rosso");
rendererComponent.setBackground( Color.RED );
}
}
return rendererComponent;
}
public void run(TableCellRenderer render) {
try{
Component rendererComponent = super.prepareRenderer(render, 0, 0);
if (!isCellSelected(0, 1)) {
// Se la cella NON E' selezionata, verifico
// se sussiste la condizione per colorarla
while(true){
System.out.println("entro nel thread");
rendererComponent.setBackground( Color.WHITE );
Thread.sleep(1000);
rendererComponent.setBackground( Color.BLACK );
Thread.sleep(1000);
}
// Inizialmente la cella sarà BIANCA
}
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
}
}
classe main
codice:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
public class Avvio {
public static void main (String[] args){
DefaultTableModel model = new DefaultTableModel();
model.addColumn("First Name");
model.addColumn("Last Name");
model.addColumn("Years");
String[] socrates = { "Socrates", "", "469-399 B.C." };
model.addRow(socrates);
String[] plato = { "Plato", "", "428-347 B.C." };
model.addRow(plato);
String[] aquinas = { "Thomas", "Aquinas", "1225-1274" };
model.addRow(aquinas);
String[] kierkegaard = { "Soren", "Kierkegaard", "1813-1855" };
model.addRow(kierkegaard);
String[] kant = { "Immanuel", "Kant", "1724-1804" };
model.addRow(kant);
String[] nietzsche = { "Friedrich", "Nietzsche", "1844-1900" };
model.addRow(nietzsche);
String[] arendt = { "Hannah", "Arendt", "1906-1975" };
model.addRow(arendt);
CustomTable table = new CustomTable(model);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JScrollPane(table));
//f.getContentPane().add(test.getControls(table), "South");
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
table.run(table.getCellRenderer(0, 1));
}
}
L'effetto che ottengo è solamente una tabella con lo sfondo blue e stop
Però io vedo che il mio thread viene sempre richiamato