Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTabbedPane ArrayIndexOutOfBoundsException:0_Java_Swing_Exception_Jtabbedpane - Fatal编程技术网

Java JTabbedPane ArrayIndexOutOfBoundsException:0

Java JTabbedPane ArrayIndexOutOfBoundsException:0,java,swing,exception,jtabbedpane,Java,Swing,Exception,Jtabbedpane,我试图在我的JavaSwing应用程序中创建一个选项卡式窗格,但它不起作用 将JTabbedPane设置为contentpane时,一切正常。只要我尝试添加选项卡,就会得到ArrayIndexOutOfBoundsException:0 组件被添加到了窗格中,但只是抛出了这个错误。下面是我的代码和错误 代码: 错误: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 at java

我试图在我的JavaSwing应用程序中创建一个选项卡式窗格,但它不起作用

将JTabbedPane设置为contentpane时,一切正常。只要我尝试添加选项卡,就会得到ArrayIndexOutOfBoundsException:0

组件被添加到了窗格中,但只是抛出了这个错误。下面是我的代码和错误

代码:

错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at javax.swing.plaf.basic.BasicTabbedPaneUI.paintTabArea(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI.paint(Unknown Source)
at javax.swing.plaf.metal.MetalTabbedPaneUI.paint(Unknown Source)
at javax.swing.plaf.metal.MetalTabbedPaneUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at java.awt.Window.paint(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1200(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

我希望任何人都知道发生了什么。

我不知道为什么要在contentPane中设置BorderLayout,我建议您将变量名更改为tabbedPane并删除这一行:

tabbedPane.setLayout(new BorderLayout(0, 0));
这修复了错误

如果要编辑选项卡的布局,请使用该布局创建一个JPanel,并将其作为参数而不是JButtons传递

另一件需要注意的事情是不调用setBounds,而是使用pack和setLocation或setLocationRelativeTo或setLocationByPlatform方法


现在,作为旁注,不要扩展JFrame,大家一致认为这是一种不好的做法。另请参见

我不确定为什么要将BorderLayout设置为contentPane,我建议您将变量名称更改为tabbedPane并删除此行:

tabbedPane.setLayout(new BorderLayout(0, 0));
这修复了错误

如果要编辑选项卡的布局,请使用该布局创建一个JPanel,并将其作为参数而不是JButtons传递

另一件需要注意的事情是不调用setBounds,而是使用pack和setLocation或setLocationRelativeTo或setLocationByPlatform方法


现在,作为旁注,不要扩展JFrame,大家一致认为这是一种不好的做法。另请参见

您是否在Swing事件线程上使用SwingUtilities.invokeLaterRunnable r启动GUI?欢迎使用堆栈溢出!请带上,四处看看,并通读,尤其是和。请提供一个是的,我是。这是我不应该做的吗?你应该在事件线程上启动GUI。你需要创建并发布一个提示,但首先查看提示,添加@HovercraftFullOfEels或任何你想回复的人@很重要,这样他们就会收到你回复的通知。顺便说一句,对于一个几乎完整的MCV,您是否在Swing事件线程上启动GUI,使用SwingUtilities.invokeLaterRunnable r?欢迎使用Stack Overflow!请带上,四处看看,并通读,尤其是和。请提供一个是的,我是。这是我不应该做的吗?你应该在事件线程上启动GUI。你需要创建并发布一个提示,但首先查看提示,添加@HovercraftFullOfEels或任何你想回复的人@很重要,这样他们就会收到你回复的通知。顺便说一句,1+为一个几乎完整的MCVEThat确实解决了它,谢谢!我对Java中的Swing和GUI非常陌生,所以我不知道这会把它搞砸。@FinnBon:事实上,它完全阻止了JTabbedPane正确地布局选项卡,因为它使用自己的布局管理器来进行布局。但更重要的是,从逻辑上考虑,你为什么要这么做?在未来,请张贴一个有效的与您的问题,这意味着我们可以复制和粘贴它,并运行它没有修改。我们无法使用您的代码,因为您没有显示有效的类或导入,关键是让我们尽可能轻松地回答问题。1+这个答案确实解决了问题,谢谢!我对Java中的Swing和GUI非常陌生,所以我不知道这会把它搞砸。@FinnBon:事实上,它完全阻止了JTabbedPane正确地布局选项卡,因为它使用自己的布局管理器来进行布局。但更重要的是,从逻辑上考虑,你为什么要这么做?在未来,请张贴一个有效的与您的问题,这意味着我们可以复制和粘贴它,并运行它没有修改。我们无法使用您的代码,因为您没有显示有效的类或导入,关键是让我们尽可能轻松地回答问题。对这个答案有1+的回答