2016-05-22 2 views
0

Я делаю все возможное, чтобы просто создавать таблицы только для чтения (пустые, но готовые получить содержимое столбца и имена строк) рядом со списком в Java-приложении, но я до сих пор не могу понять, в чем проблема с эти таблицыСоздание таблиц в java


Я получаю исключение

исключение в потоке "АВТ-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 в examples.TableData.getColumnCount (TableData.java:25) at javax.swing.JTable.createDefaultColumnsFromModel (JTabl e.java:1285) на javax.swing.JTable.tableChanged (JTable.java:4386) на javax.swing.JTable.setModel (JTable.java:3688) на javax.swing.JTable. (JTable.java : 632) на javax.swing.JTable. (JTable.java:573) на примерах. Обычно $ 2.run (Main.java:77) на java.awt.event.InvocationEvent.dispatch (InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl (EventQueue.java:756) at java.awt.EventQueue.access $ 500 (EventQueue.java:97) at java.awt.EventQueue $ 3.run (EventQueue.java:709) at java.awt.EventQueue $ 3.run (EventQueue.java:703) at java.security.AccessController.doPrivileged (собственный метод) at java.security.Protecti onDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:75) в java.awt.EventQueue.dispatchEvent (EventQueue.java:726) в java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:201) в java.awt.EventDispatchThread .pumpEventsForFilter (EventDispatchThread.java:116) на java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:105) на java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:101) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:93) на java.awt.EventDispatchThread.run (EventDispatchThread.java:82) строить успешные (общее время: 5 секунд)


Вот основной файл:

/* Програма с графичен интерфейс (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); 
    } 
} 

и вот источник Пакет необходимо:

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]; 
    } 
    //-------------------------------------------------------------------------- 
} 

Я почти иметь мои худшие кошмары

+0

Вы пытаетесь получить доступ к длине первого элемента 'values', в getColumnCount(), но' values' инициализируется пустым массивом. Таким образом, по определению он не имеет какого-либо элемента. –

ответ

1

в

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

где вы инициализируете «значения»? он выглядит пустым.

в

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

Вы пытаетесь доступ к значениям [0] без проверки, если есть "значение [0]".

+0

Ну, я хочу добавить значения позже, когда выбран вариант списка, поэтому я не знаю, что делать – Corelation

+0

, если вы хотите добавить элементы динамически, используя ArrayList из ArrayList. Еще одно простое решение - выяснить размер, который вам нужен, и добавить конструктор в TableData, который создает массив («новый» с правильными размерами) – ozma

Смежные вопросы