2016-05-22 9 views
0

Ich tue mein Bestes, um nur Lese-Tabellen (leer, aber bereit, Spalteninhalt und Zeilennamen) neben einer Liste in einer Java-Anwendung zu erstellen, aber ich kann immer noch nicht herausfinden, was das Problem ist diese TabellenErstellen von Tabellen in Java


ich die Ausnahme

Exception in thread "AWT-Eventqueue-0" java.lang.ArrayIndexOutOfBoundsException erhalten: 0 bei examples.TableData.getColumnCount (TableData.java:25) bei javax.swing.JTable.createDefaultColumnsFromModel (JTabl e.java:1285) bei javax.swing.JTable.tableChanged (JTable.java:4386) bei javax.swing.JTable.setModel (JTable.java:3688) bei javax.swing.JTable. (JTable.java : 632) bei javax.swing.JTable. (JTable.java:573) bei examples.Main $ 2.run (Main.java:77) bei java.awt.event.InvocationEvent.dispatch (InvocationEvent.java:311) bei java.awt.EventQueue.dispatchEventImpl (EventQueue.java:756) bei java.awt.EventQueue.access $ 500 (EventQueue.java:97) bei java.awt.EventQueue $ 3.run (EventQueue.java:709) bei java.awt.EventQueue $ 3.run (EventQueue.java:703) bei java.security.AccessController.doPrivileged (native Methode) bei java.security.Protecti onDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:75) bei java.awt.EventQueue.dispatchEvent (EventQueue.java:726) bei java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:201) bei java.awt.EventDispatchThread .pumpEventsForFilter (EventDispatchThread.java:116) bei java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:105) bei java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:101) bei java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:93) bei java.awt.EventDispatchThread.run (EventDispatchThread.java:82) BUILD erfolgreich (Gesamtzeit: 5 Sekunden)

Hier ist die Hauptdatei:

/* Програма с графичен интерфейс (swing/awt), която 
* извежда продуктовите категории от базата данни на "northwind" 
* и изкарва информация за продуктите в нея 
*/ 

package examples; 

/* Компоненти на swing */ 
import javax.swing.SwingUtilities; 
import javax.swing.JList; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 
import javax.swing.JTable; 
import javax.swing.table.TableColumn; 
import javax.swing.table.TableColumnModel; 
/* Компоненти на awt */ 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.Container; 
import java.awt.BorderLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseEvent; 
/* Компоненти на SQL ?? */ 

public class Main 
{ 
    public static void main(String[] args) 
    { 
     /* ЗАГЛАВИЕ на прозорец, добавяне на КОНТЕЙНЪР в прозореца */ 
     JFrame frame = new JFrame("Product Exmplorer"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Container contentPane = frame.getContentPane(); 

     /* Използване на JList     ЛИСТ */ 
     String labels[] = { "Test1", "Test2" }; 
     JList jlist = new JList(labels); 

     /* Слагане на       ПЛЪЗГАЧИ в контейнъра */ 
     JScrollPane scrollPane1 = new JScrollPane(jlist); 
     contentPane.add(scrollPane1, BorderLayout.EAST); 

     /**********************************************************************/ 
     /* Дефиниране на      ЛИСЪНЪР за клик */ 
     MouseListener mouseListener = new MouseAdapter() 
     { 
      public void mouseClicked(MouseEvent mouseEvent) 
      { 
       JList theList = (JList) mouseEvent.getSource(); 
       if (mouseEvent.getClickCount() == 2) 
       { 
        int index = theList.locationToIndex(mouseEvent.getPoint()); 
        if (index >= 0) 
        { 
         Object o = theList.getModel().getElementAt(index); 
         System.out.println("Double-clicked on: " + o.toString()); 
        } 
       } 
      } 
     }; 
     jlist.addMouseListener(mouseListener); 

     /**********************************************************************/ 

     Runnable runner = new Runnable() // анонимен клас 
     { 
      @Override 
      public void run() 
      { 
       JFrame frame = new JFrame("Button model"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       // създаване на таблицата 
       TableData td = new TableData(); 
       JTable table = new JTable(td); 
       table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); 

       JScrollPane scrollPane = new JScrollPane(table); 
       frame.add(scrollPane , BorderLayout.CENTER); 

       frame.pack(); 
       frame.setVisible(true); 
      } 
     }; 

     SwingUtilities.invokeLater(runner); 
    } 
} 

und hier ist der Quellcode-Paket benötigt:

package examples; 

import java.util.Calendar; 
import java.util.GregorianCalendar; 
import javax.swing.table.AbstractTableModel; 

public class TableData extends AbstractTableModel 
{ 
    //Row & Column Data 
    private Object[][] values = 
    { 
    }; 
    private final String[] columnHeaders = { 
     "Име", "Фамилия", "Роден(а) на", "Сума", "Пол" 
    }; 

    @Override 
    public int getRowCount() 
    { 
     return values.length; 
    } 
    @Override 
    public int getColumnCount() 
    { 
     return values[0].length; 
    } 
    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) 
    { 
     return values[rowIndex][columnIndex]; 
    } 
    //-------------------------------------------------------------------------- 
} 

Ich bin fast meine schlimmsten Albträume zu haben

+0

Sie versuchen, auf die Länge des ersten Elements von 'values' in getColumnCount() zuzugreifen, aber' values' wird auf ein leeres Array initialisiert. Es hat also per Definition kein Element. –

Antwort

1

in

TableData extends AbstractTableModel 
{ 
    //Row & Column Data 
    private Object[][] values = 

wo initialisieren Sie "Werte"? es sieht leer aus.

in

public int getColumnCount() 
{ 
    return values[0].length; 
} 

Sie versuchen, den Zugriff auf Werte [0], ohne zu überprüfen, ob es "Werte [0]" ist.

+0

Nun, ich möchte später Werte hinzufügen, wenn eine Listenoption ausgewählt wurde, so dass ich nicht weiß, was zu tun ist – Corelation

+0

Wenn Sie Elemente dynamisch hinzufügen möchten, verwenden Sie ArrayList von ArrayList. Eine weitere einfache Lösung besteht darin, die benötigte Größe zu ermitteln und TableData einen Konstruktor hinzuzufügen, der das Array erstellt ("neu" mit den richtigen Größen). – ozma