2012-01-21 2 views
0

У меня есть странная проблема с использованием JTabbedPane и добавление к ней новой вкладки.Java - JTabbedPane - ArrayIndexOutOfBoundsException при добавлении новой панели

public void addTab(String title, AbstractTab tab) { 
    int i = tabPanel.getTabCount(); 
    System.out.println("Tab count:" + i); 
    tab.validate(); 
    tabPanel.insertTab(title, null, tab, title, i); 
    tabPanel.validate(); 
    tabPanel.setSelectedIndex(i); 
} 

Выполнение этого кода вызывает следующее исключение:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 
at java.util.Vector.elementAt(Unknown Source) 
at javax.swing.JTabbedPane.getTitleAt(Unknown Source) 
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.updateHtmlViews(Unknown Source) 
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.componentAdded(Unknown Source) 
at java.awt.Container.processContainerEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.Container.addImpl(Unknown Source) 
at javax.swing.JTabbedPane.insertTab(Unknown Source) 
at View.Swing.Global.**EditorPanel.addTab(EditorPanel.java:383)** 
at View.Swing.Developer.DeveloperContentPanel.showNote(DeveloperContentPanel.java:176) 
at View.Swing.Developer.DeveloperTreeViewer.clickedTreeElement(DeveloperTreeViewer.java:62) 
at View.Swing.Global.TreeNavigation.mouseClicked(TreeNavigation.java:556) 
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source) 
... 

The System.out.println(..); принты

Tab count 1 

Странная вещь, что этот метод работает один раз, а в другой раз он бросает это исключение , Добавленные вкладки представляют собой экземпляры класса AbstractTab, содержащие JTextFields, a MetaphaseEditor, полосы прокрутки, JLabels и JTextArea s и некоторые фотографии (ImageIcon).

Кто-нибудь знает, как решить эту проблему?

+3

Вы не можете иметь достаточно информации, чтобы дать нам ответ. Рассмотрите возможность создания и публикации [SSCCE] (http://SSCCE.org) - небольшой компилируемой и исполняемой программы, которую мы можем запускать в рамках внешних ресурсов и которая демонстрирует вашу проблему. Кроме того, я думаю, что слово, которое вы ищете, «странно». –

+3

Почему вы не используете 'addTab()' и 'setSelectedComponent()'? Тогда вам не нужно заботиться об индексе. – Stephan

ответ

2

от Bugtracker, возможно, вы используете компонент более одного раза?

Уточнить в документации, что нет 2 вкладки в JTabbedPane может иметь тот же компонент, назначенный им .. вызывает java.lang.ArrayIndexOutOfBoundsException: 1> 0

+0

+1 для хорошей идеи :-) хотя при этом фактическая стоп-таблица немного отличается от приведенной выше (IndexOOB в JTabbedPane.checkIndex) – kleopatra

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