2012-05-24 6 views
2

Я установил JTable и сделал его, чтобы он содержал 18 столбцов. Первоначально, когда это было 13 колонок, он прекрасно вписывался в JTable, и не было разрывов. Однако, как только я заставил его содержать 18 таблиц и отключить авторезист, когда я использую горизонтальную полосу прокрутки для прокрутки других столбцов, началось разрывание JTable, как показано на рисунке:JTable разрывание при рендеринге

table image http://oi46.tinypic.com/2uzupg0.jpg

Netbeans также начал давать мне много сообщений об ошибках, подобные этим:

 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14 
    at javax.swing.JTable$1.getValueAt(JTable.java:689) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684) 
    at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581) 
    at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365) 
    at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276) 
    at javax.swing.JComponent.paintComponent(JComponent.java:778) 
    at javax.swing.JComponent.paint(JComponent.java:1054) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent.paintForceDoubleBuffered(JComponent.java:1090) 
    at javax.swing.JViewport.blitDoubleBuffered(JViewport.java:1598) 
    at javax.swing.JViewport.windowBlitPaint(JViewport.java:1559) 
    at javax.swing.JViewport.setViewPosition(JViewport.java:1102) 
    at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.hsbStateChanged(BasicScrollPaneUI.java:1087) 
    at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.stateChanged(BasicScrollPaneUI.java:1038) 
    at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedRangeModel.java:364) 
    at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBoundedRangeModel.java:302) 
    at javax.swing.DefaultBoundedRangeModel.setValue(DefaultBoundedRangeModel.java:168) 
    at javax.swing.JScrollBar.setValue(JScrollBar.java:463) 
    at javax.swing.plaf.basic.BasicScrollBarUI$TrackListener.setValueFrom(BasicScrollBarUI.java:1253) 
    at javax.swing.plaf.basic.BasicScrollBarUI$TrackListener.mouseDragged(BasicScrollBarUI.java:1195) 
    at java.awt.Component.processMouseMotionEvent(Component.java:6553) 
    at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3339) 
    at java.awt.Component.processEvent(Component.java:6274) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4509) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703) 
    at java.awt.EventQueue.access$000(EventQueue.java:102) 
    at java.awt.EventQueue$3.run(EventQueue.java:662) 
    at java.awt.EventQueue$3.run(EventQueue.java:660) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:676) 
    at java.awt.EventQueue$4.run(EventQueue.java:674) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:673) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14 
    at javax.swing.JTable$1.getValueAt(JTable.java:689) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684) 
    at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581) 
    at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365) 
    at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276) 
    at javax.swing.JComponent.paintComponent(JComponent.java:778) 
    at javax.swing.JComponent.paint(JComponent.java:1054) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JViewport.paint(JViewport.java:731) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701) 
    at java.awt.EventQueue.access$000(EventQueue.java:102) 
    at java.awt.EventQueue$3.run(EventQueue.java:662) 
    at java.awt.EventQueue$3.run(EventQueue.java:660) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:671) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14 
    at javax.swing.JTable$1.getValueAt(JTable.java:689) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684) 
    at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581) 
    at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365) 
    at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276) 
    at javax.swing.JComponent.paintComponent(JComponent.java:778) 
    at javax.swing.JComponent.paint(JComponent.java:1054) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent.paintForceDoubleBuffered(JComponent.java:1090) 
    at javax.swing.JViewport.blitDoubleBuffered(JViewport.java:1598) 
    at javax.swing.JViewport.windowBlitPaint(JViewport.java:1559) 
    at javax.swing.JViewport.setViewPosition(JViewport.java:1102) 
    at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.hsbStateChanged(BasicScrollPaneUI.java:1087) 
    at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.stateChanged(BasicScrollPaneUI.java:1038) 
    at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedRangeModel.java:364) 
    at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBoundedRangeModel.java:302) 
    at javax.swing.DefaultBoundedRangeModel.setValue(DefaultBoundedRangeModel.java:168) 
    at javax.swing.JScrollBar.setValue(JScrollBar.java:463) 
    at javax.swing.plaf.basic.BasicScrollBarUI$TrackListener.setValueFrom(BasicScrollBarUI.java:1253) 
    at javax.swing.plaf.basic.BasicScrollBarUI$TrackListener.mouseDragged(BasicScrollBarUI.java:1195) 
    at java.awt.Component.processMouseMotionEvent(Component.java:6553) 
    at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3339) 
    at java.awt.Component.processEvent(Component.java:6274) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4509) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703) 
    at java.awt.EventQueue.access$000(EventQueue.java:102) 
    at java.awt.EventQueue$3.run(EventQueue.java:662) 
    at java.awt.EventQueue$3.run(EventQueue.java:660) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:676) 
    at java.awt.EventQueue$4.run(EventQueue.java:674) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:673) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14 
    at javax.swing.JTable$1.getValueAt(JTable.java:689) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684) 
    at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581) 
    at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365) 
    at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276) 
    at javax.swing.JComponent.paintComponent(JComponent.java:778) 
    at javax.swing.JComponent.paint(JComponent.java:1054) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JViewport.paint(JViewport.java:731) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701) 
    at java.awt.EventQueue.access$000(EventQueue.java:102) 
    at java.awt.EventQueue$3.run(EventQueue.java:662) 
    at java.awt.EventQueue$3.run(EventQueue.java:660) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:671) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14 
    at javax.swing.JTable$1.getValueAt(JTable.java:689) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684) 
    at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581) 
    at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365) 
    at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276) 
    at javax.swing.JComponent.paintComponent(JComponent.java:778) 
    at javax.swing.JComponent.paint(JComponent.java:1054) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent.paintForceDoubleBuffered(JComponent.java:1090) 
    at javax.swing.JViewport.blitDoubleBuffered(JViewport.java:1598) 
    at javax.swing.JViewport.windowBlitPaint(JViewport.java:1559) 
    at javax.swing.JViewport.setViewPosition(JViewport.java:1102) 
    at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.hsbStateChanged(BasicScrollPaneUI.java:1087) 
    at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.stateChanged(BasicScrollPaneUI.java:1038) 
    at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedRangeModel.java:364) 
    at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBoundedRangeModel.java:302) 
    at javax.swing.DefaultBoundedRangeModel.setValue(DefaultBoundedRangeModel.java:168) 
    at javax.swing.JScrollBar.setValue(JScrollBar.java:463) 
    at javax.swing.plaf.basic.BasicScrollBarUI$TrackListener.setValueFrom(BasicScrollBarUI.java:1253) 
    at javax.swing.plaf.basic.BasicScrollBarUI$TrackListener.mouseDragged(BasicScrollBarUI.java:1195) 
    at java.awt.Component.processMouseMotionEvent(Component.java:6553) 
    at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3339) 
    at java.awt.Component.processEvent(Component.java:6274) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4509) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703) 
    at java.awt.EventQueue.access$000(EventQueue.java:102) 
    at java.awt.EventQueue$3.run(EventQueue.java:662) 
    at java.awt.EventQueue$3.run(EventQueue.java:660) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:676) 
    at java.awt.EventQueue$4.run(EventQueue.java:674) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:673) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 

Почему это так? Есть ли решение этой проблемы? Благодаря!

Так извините! Вот код, используемый для инициализации таблицы. Надеюсь, это будет полезно!

jp.setLayout(new BorderLayout()); 
    JTable jt = new JTable(data, column);// data and columns are just 2D and 1D String arrays each 
    JTableHeader th = jt.getTableHeader(); 
    th.setBackground(java.awt.Color.pink); 
    th.setEnabled(true); 
    jt.setTableHeader(th); 
    jt.setEnabled(false); 
    jp.add(jt, BorderLayout.CENTER); 
    JScrollPane scrollPane = new JScrollPane(jt, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    scrollPane.setEnabled(false); 
    jp.add(scrollPane, BorderLayout.CENTER); 
+0

В вашем коде явно что-то не так. Вероятно, ваши действия в стеке, вероятно, являются причиной вашей проблемы. Поместите некоторый код, который воспроизводит проблему. –

+0

Добавлено в некоторый код! – Laughy

ответ

5

Я думаю, что вы указали больше столбцов, чем в вашем массиве данных.

Этот образец кода воспроизводит именно вашу проблему:

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class TestTable { 

    public JFrame f; 
    private JTable table; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestTable().initUI(); 
      } 
     }); 
    } 

    protected void initUI() { 
     String[][] data = new String[1][1]; 
     data[0] = new String[] { "hello" }; 
     String[] columns = new String[] { "Column-1", "Column-2" }; 
     table = new JTable(data, columns); 
     f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(300, 300); 
     f.setLocationRelativeTo(null); 
     f.add(new JScrollPane(table)); 
     f.setVisible(true); 
    } 

} 

Решение, конечно, чтобы число столбцов в данных совпадает с номером столбца, Вы заявляете. И вы должны убедиться, что каждая «строка» вашего массива данных инициализируется с правильным количеством «столбцов».

Например, вы могли бы это:

String[][] data = new String[1][18]; 
data[0] = new String[15]; // <-- This will cause some problems 

Теперь, я бы рекомендовал использовать другую структуру данных, чем массивы, потому что это не очень гибким, и они, как правило, получить трудно поддерживать. Простое решение должны иметь некоторый класс «Model» и создать свой собственный TableModel как это:

import java.util.List; 
import java.util.Random; 
import java.util.Vector; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.AbstractTableModel; 

public class TestTable { 

    public JFrame f; 
    private JTable table; 

    public class ModelObject { 
     private String column0; // Consider using something more explicit than column0,1,... 
     private String column1; 

     public String getColumn0() { 
      return column0; 
     } 

     public void setColumn0(String column0) { 
      this.column0 = column0; 
     } 

     public String getColumn1() { 
      return column1; 
     } 

     public void setColumn1(String column1) { 
      this.column1 = column1; 
     } 
    } 

    private class TableModel extends AbstractTableModel { 

     private List<ModelObject> data; 

     protected TableModel(List<ModelObject> data) { 
      super(); 
      this.data = data; 
     } 

     @Override 
     public int getRowCount() { 
      return data.size(); 
     } 

     @Override 
     public String getColumnName(int column) { 
      switch (column) { 
      case 0: 
       return "Header 0"; 
      case 1: 
       return "Header 1"; 
      } 
      System.err.println("Only two columns are known in this table model"); 
      return "???"; 
     } 

     @Override 
     public int getColumnCount() { 
      return 2; 
     } 

     @Override 
     public Object getValueAt(int rowIndex, int columnIndex) { 
      ModelObject o = data.get(rowIndex); 
      switch (columnIndex) { 
      case 0: 
       return o.getColumn0(); 
      case 1: 
       return o.getColumn1(); 
      } 
      System.err.println("Only two columns are known in this table model"); 
      return null; 
     } 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestTable().initUI(); 
      } 
     }); 
    } 

    protected void initUI() { 
     Random r = new Random(); 
     Vector<ModelObject> data = new Vector<TestTable.ModelObject>(); 
     for (int i = 0; i < 10; i++) { 
      ModelObject o = new ModelObject(); 
      o.setColumn0("Some stuff in column 0 " + i); 
      o.setColumn1("Some other stuff in column 1 " + r.nextInt()); 
      data.add(o); 
     } 
     table = new JTable(new TableModel(data)); 
     f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(300, 300); 
     f.setLocationRelativeTo(null); 
     f.add(new JScrollPane(table)); 
     f.setVisible(true); 
    } 

} 

Здесь все написано в одном классе, но, конечно, вы должны разделить их, чтобы правильно следовать MVC-шаблону.

+0

Это решило мою проблему! Так глупо от меня ... Я объявил номер колонки короче, чем номер истинного столбца. – Laughy

1

Ответ в этой строке:

Исключение в потоке "АВТ-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14 в

Это означает, что он знает, что он должен иметь больше столбцов , и он хотел рисовать следующий столбец, но не мог, потому что в базовой модели таблицы не было так много столбцов.

Предоставление таблицы 18 столбцов означает, что вам также необходимо обновить связанную модель таблицы. Оба должны синхронизировать работу таблицы.

+0

Хмм, но модель таблицы, которую я использую, является табличной моделью по умолчанию ... Я не задал для нее никакой модели таблицы. Как обновить модель таблицы? Спасибо за вашу помощь! – Laughy

+0

Я вижу, проблема уже решена - замечательный материал! – Ewald

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