L'errore me lo da in questa riga:
codice:
table.scrollRectToVisible(table.getCellRect(table.getRowCount()-1, 0, true));
model è il DefaultTableModel(); !!!
Stavo provando quest'altra strada.... costruire una classe che mi restituisca la JTable, così ad ogni inserimento di nuovi dati ridisegno la JTable.
La JTable la ottengo però ho due problemi:
1) non mi si posiziona più all'ultima riga della JTable!!
2) non riesco ad avere più le info della riga su cui clicco con il mouse!!
Codice della classe generatrice della JTable:
codice:
package pannelli;
import grafica.RegModelTable;
import java.awt.Dimension;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import database.RegistroCassa;
public class RegistroTable extends JTable {
/**
*
*/
private static final long serialVersionUID = 1L;
final DefaultTableModel model = new DefaultTableModel();
private JTable table;
public RegistroTable(RegistroCassa registro) {
Object[] columnHeaders = {"NUM","OPERAZIONE","IMPORTO","DATA","MOTIVO","CATEGORIA","SALDO","BOLLETTA"};
String[] checkRed = registro.getRedCheck();
final Object[][] rowData = registro.getRowData();
int numRow = registro.getNumRow();
System.out.println("rowData: "+rowData[1][100]);
table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(1190,632));
table.setFillsViewportHeight(true);
table.setColumnSelectionAllowed(false);
table.getTableHeader().setReorderingAllowed(false); // SPOSTAMENTO DELLE COLONNE
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setAutoResizeMode(0); //AUTO RESIZE OFF
TableColumn colonna = null;
// DATI JTABLE
for(int i=0; i<rowData.length; i++) {
model.addColumn("<html>"+columnHeaders[i]+"</html>");
}
for(int i=0; i<numRow; i++) {
model.addRow(new Object[] {rowData[0][i],rowData[1][i],"€ "+rowData[2][i],rowData[3][i],
rowData[4][i],rowData[5][i],"€ "+rowData[6][i],rowData[7][i]});
for(int x=0; x<model.getColumnCount(); x++) {
table.getColumnModel().getColumn(x).setCellRenderer(new RegModelTable(checkRed));// SETUP TABELLA
}
}
//SETUP delle COLONNE
for(int i=0; i<rowData.length; i++) {
// IMPOSTAZIONI COLONNE
colonna = table.getColumnModel().getColumn(i);
colonna.setResizable(false);
//(String) colonna.getIdentifier()
switch(i) {
case 0:
colonna.setPreferredWidth(35); // ID
break;
case 1:
colonna.setPreferredWidth(85); // OPERAZIONE
break;
case 2:
colonna.setPreferredWidth(70); // IMPORTO
break;
case 3:
colonna.setPreferredWidth(80); // DATA
break;
case 4:
colonna.setPreferredWidth(650); // MOTIVO
break;
case 5:
colonna.setPreferredWidth(80); // CATEGORIA
break;
case 6:
colonna.setPreferredWidth(70); // SALDO
break;
case 7:
colonna.setPreferredWidth(80); // BOLLETTA
break;
}
}
//====================================================================================================
table.scrollRectToVisible(table.getCellRect(table.getRowCount()-1, 0, true)); // POSIZIONE VERTICALE DELLA SCROLLPANE
}
}
Questo invece la parte di codice che richiama la JTable...
codice:
public PageRegistro(RegistroCassa registro) {
// SETTING DATI JTABLE===============================================================================
final Object[][] rowData = registro.getRowData();
table = new RegistroTable(registro);
// DATI per l'invio alla classe NewRegPage
saldo = registro.getSaldo();
operazione = registro.getNum();
.....
// regPan JPANEL
JPanel regPan = new JPanel();
regPan.setBorder(BorderFactory.createEtchedBorder());
regPan.setLayout(new FlowLayout(FlowLayout.CENTER));
regPan.add(new JScrollPane(table));
table.scrollRectToVisible(table.getCellRect(table.getRowCount()-1, 0, true)); // POSIZIONE VERTICALE DELLA SCROLLPANE
// ---------- AZIONI per JTable
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
//Ricavo la tabella che ha prodotto l'evento
JTable table = (JTable)e.getSource();
//Calcolo la rigae colonna su cui si è fatto click
int rigaSelezionata = table.getSelectedRow();
int clickedRow = table.columnAtPoint(e.getPoint());
Log.nor("rigaSelezionata: "+rigaSelezionata+"\nclickedRow: "+clickedRow);
String[] infoTesto = new String[rowData.length];
for(int i=0; i<rowData.length; i++) {
infoTesto[i] = (String) table.getValueAt(rigaSelezionata,i);
}
subInfoPan.refresh(infoTesto);
cdLay.show(infoPan, "sub");
}
});
.......