Java JTabbedPane FlowLayout抛出ArrayIndexOutOfBoundsException

Java JTabbedPane FlowLayout抛出ArrayIndexOutOfBoundsException,java,swing,jtabbedpane,indexoutofboundsexception,flowlayout,Java,Swing,Jtabbedpane,Indexoutofboundsexception,Flowlayout,我正在尝试将流布局应用于JTabbedPane,以便设置hgap(0)和vgap(0)。JTabbedPane的默认布局会在四周留下间隙 当我尝试设置布局时,会引发以下代码: import java.awt.BorderLayout; import java.awt.FlowLayout; import java.lang.reflect.InvocationTargetException; import javax.swing.*; public class Main { pu

我正在尝试将流布局应用于JTabbedPane,以便设置hgap(0)和vgap(0)。JTabbedPane的默认布局会在四周留下间隙

当我尝试设置布局时,会引发以下代码:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.lang.reflect.InvocationTargetException;

import javax.swing.*;


public class Main {

    public static void main(String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                @Override public void run() {
                    JFrame F = new JFrame("Testing");
                    F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    JTabbedPane Pane = new JTabbedPane();
                    Pane.setLayout(new FlowLayout(0, 0, FlowLayout.CENTER));
                    F.setLayout(new BorderLayout());
                    F.add(Pane, BorderLayout.CENTER);

                    Pane.addTab("Hello", new JPanel());
                                    F.pack();
                    F.setVisible(true);
                }
            });
        } catch (InvocationTargetException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}
我在没有流程布局的情况下看到的内容:

我想去掉黑色JPanel周围的绿松石色边框。我不想删除选项卡。我只想删除选项卡和组件之间的空间。我想移除上图中看起来略带蓝色的组件周围的空间

为什么它会抛出一个异常,说ArrayIndexOutOfBounds:

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.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$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.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$1000(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$200(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$1.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)

我不认为你能弄乱JTabbedPane的布局。即使这样考虑也是没有道理的。它可能有自己的专业布局


编辑1
事实上确实如此:tabbeddanelayout

解决方案:不要弄乱JTabbedPane的布局,当然也不要将其替换为另一个无法使用JTabbedPane的布局


编辑2
你说:


我怎样才能消除它周围的空隙呢?我在组件周围留下了这些间隙:我也尝试了其他布局。。是的,他们也扔

最好是更改JTabbedPane持有的组件的布局,以允许它们重新调整大小并填补空白,但为了让我们能够完全了解您可能遇到的问题,请显示您正在看到的以及您试图显示的图像


编辑3
你说:

想移除黑色JPanel周围的绿松石色边框。我不想删除选项卡。我只想删除选项卡和组件之间的空间。我想移除上图中看起来略带蓝色的组件周围的空间


这可能是一个外观问题,而不是布局问题。至于你最初问题的直接答案,答案是:不要弄乱JTabbedPane布局,句号。至于你要解决的问题,考虑使用不同的L&F,或者如果这不起作用,为JTabDeBeNe编写自己的UI委托。不过,我自己从来没有做过这种事情。

我认为你不会弄乱JTabbedPane的布局。即使这样考虑也是没有道理的。它可能有自己的专业布局。我如何才能消除它周围的差距呢?我在组件周围留下了这些间隙:我也尝试了其他布局。。是的,他们也扔。嗨,先生。我加了一幅画。还有一个描述,指出了我要删除的内容。我会将此标记为已解决。我想这是合乎逻辑的。。我尝试了不同的外观和感觉。我尝试了:“UIManager.getDefaults().put”(“TabbedPane.contentBorderInsets”),新的Insets(0,0,0,0));UIManager.getDefaults().put(“TabbedPane.tabsOverlapBorder”,false);'它适用于右、下、左边框。现在只需拆下顶部即可。反正是Thanx。