L'errore me lo da in questa riga:
model è il DefaultTableModel(); !!!codice:table.scrollRectToVisible(table.getCellRect(table.getRowCount()-1, 0, true));
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:
Questo invece la parte di codice che richiama la 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 } }
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"); } }); .......

Rispondi quotando