java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 essayant de remplir JTable
Je suis sous-classement JTable et à l'aide d'un DefaultTableModel pour le modèle de ma table de données. La classe suivante définit la JTable, et ajoute une ligne pour le modèle.
import java.io.File;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class SelectedFileTable extends JTable {
Vector<File> SelectedFiles = new Vector<File>();
DefaultTableModel Model = new DefaultTableModel();
TableColumn ColumnName = new TableColumn();
TableColumn ColumnSize = new TableColumn();
TableColumn ColumnRmIcon = new TableColumn();
ImageFilenameFilter Filter = new ImageFilenameFilter();
public SelectedFileTable() {
super();
this.setModel(Model);
ColumnName.setHeaderValue(new String("Name") );
ColumnName.setMinWidth(200);
ColumnSize.setHeaderValue(new String("Size") );
ColumnSize.setMinWidth(50);
ColumnSize.setMaxWidth(100);
ColumnRmIcon.setHeaderValue(new String("Remove?") );
ColumnRmIcon.setMaxWidth(100);
ColumnRmIcon.setResizable(false);
this.addColumn(ColumnName);
this.addColumn(ColumnSize);
this.addColumn(ColumnRmIcon);
this.setShowVerticalLines(false);
this.setShowHorizontalLines(true);
this.setAutoCreateColumnsFromModel(true);
this.addFile( new File("C:/temp/cfk.jpg") );
}
public void addFile(File file) {
System.out.println("FileTable adding: " + file.getName() );
if ( file.isDirectory() ) {
for ( File f : file.listFiles(Filter) ) {
this.addFile(f);
}
} else {
if ( Filter.accept(file) ) {
System.out.println("Accepting file; " + file.getName() );
SelectedFiles.add(file);
{
String name = file.getName();
Long size = new Long( file.length() );
String tempstr = new String("X");
System.out.println("RowItems before: " + Integer.toString(Model.getRowCount()) );
Model.addRow( new Object[] { name, size, tempstr } );
Model.fireTableDataChanged();
System.out.println("RowItems start : " + Integer.toString(Model.getRowCount()) );
}
System.out.println("Done Accepting file; " + file.getName() );
}
}
}
public Iterator<File> iterator() {
return SelectedFiles.iterator();
}
}
Lors de l'affichage/visualisation temps, l'exception suivante est générée:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:432)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:622)
at javax.swing.JTable.getValueAt(JTable.java:1903)
at javax.swing.JTable.prepareRenderer(JTable.java:3911)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1897)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at javax.swing.JComponent.paintComponent(JComponent.java:743)
at javax.swing.JComponent.paint(JComponent.java:1006)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JViewport.paint(JViewport.java:728)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:559)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4979)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4925)
at javax.swing.JComponent.paint(JComponent.java:996)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1709)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:254)
at java.awt.Component.dispatchEventImpl(Component.java:4060)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Je suis extraction de mes cheveux - je n'ai pas été en mesure de trouver la cause de cette immense cas simple d'utilisation.
Je n'avais jamais vu ce hors-limites message d'exception jusqu'à aujourd'hui. Merci de m'aider à déboguer mon application!
s'il vous plaît apprendre conventions de nommage java et de s'y tenir
expliquer?
Tous d'entre eux. Quel est exactement votre problème spécifique?
Je suppose que e. g. les variables d'instance sont censés commencer par une lettre minuscule en Java
s'il vous plaît apprendre conventions de nommage java et de s'y tenir
expliquer?
Tous d'entre eux. Quel est exactement votre problème spécifique?
Je suppose que e. g. les variables d'instance sont censés commencer par une lettre minuscule en Java
OriginalL'auteur Chris K | 2009-11-13
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez besoin pour ajouter des colonnes à votre TableModel. Votre code ajoute de l'INTERFACE utilisateur des colonnes de la table mais ne pas ajouter au modèle de
OriginalL'auteur Dmitry
J'ai couru sur cette question (avec une JList et un DefaultListModel).
Dmitry la réponse est juste.
Cependant, il y a autre chose:
cette exception peut également être levée si vous n'avez pas à modifier le modèle dans le Swing de l'Event Dispatch Thread.
De faire ce qui suit peut vous aider à éviter cette exception:
http://www.javakb.com/Uwe/Forum.aspx/java-gui/3012/JList-JScrollPane-DefaultListModel-Updating
votre répondu m'a aidé, je vous remercie pour le partage
OriginalL'auteur Séverin
Dmitry est droit. Remplacer
avec
et maintenant, le Modèle sait à propos de la columsn et ne lèvera une Exception plus lorsque vous essayez d'ajouter une ligne à un modèle qui pense qu'il a 0 colonnes
OriginalL'auteur jitter
De la JTable.setAutoCreateColumnsFromModel() de l'API:
"Cette méthode appelle createDefaultColumnsFromModel si autoCreateColumnsFromModel changements de false à true. "
Vecteur jette ArrayIndexOutOfBoundsException - si l'index est hors de portée ( index < 0 || index >= size())
Je suppose que le modèle de table est manquant les colonnes, comme suggéré par Dmitry
OriginalL'auteur Thimmayya
Remplacer votre code par le suivant
Ici, vous devez supprimer la première ligne qui doivent être répétées pour toutes les lignes
OriginalL'auteur satya
Une autre question pourrait être liés lorsque vous utilisez
RowSorter
. Lorsque vous modifiez le modèleRowSorter
essaie pour re-trier l'ancien modèle. Il sera automatiquement recréé et de ré-exécuter à chaque changement de modèle de table.Vous pouvez y remédier en
-Hayri
Pas de. À partir de l'API nous savons que
This method calls createDefaultColumnsFromModel if autoCreateColumnsFromModel changes from false to true
. De sorte qu'il peut être ajouté par la suite.OriginalL'auteur Hayri
J'ai été confronté à ce problème parce que j'ai été l'ajout de colonnes et de lignes à la JTable de ne pas le modèle.
meilleure façon de le faire.
OriginalL'auteur Sandeep Dass
remplacer
avec
Une telle situation peut hapen lorsque vous changez de panneau à onglets dans l'action de l'auditeur.
OriginalL'auteur yuriy
Dmitry est droit, mais vous devez simplement mettre à jour votre modèle.
Pour ce faire, ajoutez les lignes suivantes à votre code:
OriginalL'auteur Eldorim
Il est nécessaire d'ajouter
isCellEditable
méthode pour votre modèle de table de classe avec accusé de faux.OriginalL'auteur chamzz.dot