for(int c = colCount-1; c >= 0; c--)
{
TableColumn tcol = table.getColumnModel().getColumn(c);
table.removeColumn(tcol);
}
αλλά οι στήλες παραμένουν.
Επίσης είδα και το παράδειγμα http://www.exampledepot.com/egs/javax.swing.table/RemCol.html
αλλα όταν τρέχω το πρόγραμμα μου βγάζει cast error:
java.lang.ClassCastException: javax.swing.table.DefaultTableModel
cannot be cast to utils.UtilsTable$MyDefaultTableModel
κάθε βοήθεια ευσπρόδεκτη.
Ευχαριστώ προκαταβολικά
On Feb 6, 8:04 pm, Panayiotis Vlissidis <pvlissi...@gmail.com> wrote:
> Καλησπερα.
>
> Θες να αφαιρεσεις τις στηλες απο το view (TableColumnModel)
> ή από το data model (TableModel) ?
και από τα δύο, θέλω να σβήσω όλα τα δεδομένα
> Ο κωδικας που παραθετεις αφαιρει τις κολωνες απο το View
> ειναι σωστος και δεν πρεπει να πεταει καποιο exception,
> ενώ το exception σχετιζεται με το TableModel.
>
> Χρησιμοποιεις το παραδειγμα όπως ειναι γραμμενο και αν
> ναι μπορεις να γραψεις όλο το stacktrace του exception?
java.lang.ClassCastException: javax.swing.table.DefaultTableModel
cannot be cast to utils.UtilsTable$MyDefaultTableModel
at utils.UtilsTable.removeTableColumnsAndData(UtilsTable.java:339)
at guicomps.PanelReportFormDesign
$PanelFieldsAddableToForm.setEntity(PanelReportFormDesign.java:2035)
at guicomps.PanelReportFormDesign$ToolBarData
$3.actionPerformed(PanelReportFormDesign.java:1473)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at
guicomps.EventQueueTxtRightClick.dispatchEvent(EventQueueTxtRightClick.java:
26)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.Dialog$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Unknown Source)
at gui.DialogMulti.display(DialogMulti.java:83)
at
guicomps.PanelReportSettings.displayDialogFormDesign(PanelReportSettings.java:
1432)
at guicomps.PanelReportSettings.access$2300(PanelReportSettings.java:
77)
at guicomps.PanelReportSettings$ToolBarData
$5.actionPerformed(PanelReportSettings.java:1608)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI
$Handler.mouseReleased(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI
$MouseInputHandler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at
guicomps.EventQueueTxtRightClick.dispatchEvent(EventQueueTxtRightClick.java:
26)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
DefaultTableModel tm = (DefaultTableModel)table.getModel();
System.out.println("UtilsTable.removeTableColsAndData c:"+colCount
+" r:"+rowCount);
if(rowCount>0)
{
for (int r = rowCount-1; r >= 0; r--)
{
System.out.println("UtilsTable.removeTableColsAndData remove
row r:"+r);
tm.removeRow(r);
}
tm.fireTableDataChanged();
}
if(colCount>0)
{
MyDefaultTableModel model =
(MyDefaultTableModel)table.getModel();
for(int c = colCount-1; c >= 0; c--)
{
System.out.println("UtilsTable.removeTableColsAndData remove
column c:"+c+" rows "+table.getRowCount());
TableColumn col = table.getColumnModel().getColumn(c);
int columnModelIndex = col.getModelIndex();
Vector colIds = model.getColumnIdentifiers();
// Remove the column from the table
table.removeColumn(col);
// Remove the column header from the table model
colIds.removeElementAt(columnModelIndex);
/*TableColumn tcol = table.getColumnModel().getColumn(c);
table.removeColumn(tcol);*/
}
tm.fireTableStructureChanged();
}
}
// This subclass adds a method to retrieve the columnIdentifiers
// which is needed to implement the removal of
// column data from the table model
class MyDefaultTableModel extends DefaultTableModel
{
public Vector getColumnIdentifiers()
{ return columnIdentifiers; }
}
Μια ερώτηση: Υπάρχει τρόπος να χρεισιμοποιώ διάφορα tablemodel και να
κάνω cast μεσα
στις συναρτήσεις στο UtilsTable έτσι ώστε η συνάρτηση στο UtilsTable
να είναι για καθε tablemodel ;
Μια ερώτηση: Υπάρχει τρόπος να χρεισιμοποιώ διάφορα tablemodel και να
κάνω cast μεσα
στις συναρτήσεις στο UtilsTable έτσι ώστε η συνάρτηση στο UtilsTable
να είναι για καθε tablemodel ;
Αν μπορούσες να δώσεις κάποια κατεύθυνση για το πως θα κάνω cast τα
tablemodels
θα με βοηθούσες.
Συμφωνώ στο οτι θα έπρεπε να υπάρχει μόνο μια tablemodel class αλλά
στην περίπτωσή
μου είναι δύσκολο καθότι είναι πολύς ο κώδικας του κυρίως tablemodel
με αποτέλεσμα
δύσκολή η διαχείριση του κώδικα.
JTable table = new JTable(tableModel);
table.setAutoCreateColumnsFromModel(true);
tableModel.setDataVector(new Vector(0), new Vector(0));
δεν γεμίζει με δεδομένα τον πίνακα
κάποια λύση;
Χρειάζομαι τη φουλ διαγραφή ώστε να είμαι σίγουρος οτι αυτά
που θα κάνω add (οταν θα ξαναανοίξω το αρχείο) να μην διπλοεμφανιστούν.