Я делаю все возможное, чтобы просто создавать таблицы только для чтения (пустые, но готовые получить содержимое столбца и имена строк) рядом со списком в 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];
}
//--------------------------------------------------------------------------
}
Я почти иметь мои худшие кошмары
Вы пытаетесь получить доступ к длине первого элемента 'values', в getColumnCount(), но' values' инициализируется пустым массивом. Таким образом, по определению он не имеет какого-либо элемента. –