gpt4 book ai didi

java - JTabbedPane FlowLayout 抛出 ArrayIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-04 04:57:36 24 4
gpt4 key购买 nike

我正在尝试将流布局应用于 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();
}
}
}

我看到的没有流布局:
enter image description here

我想移除 Black 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
事实上它确实如此:TabbedPaneLayout

解决方案:不要弄乱 JTabbedPane 的布局,当然也不要将它换成另一个无法与 JTabbedPane 一起工作的布局。

编辑 2
你说:

How can I remove the gaps around it then? I leaves these gaps all around the component :S I tried other layouts as well.. yeah they throw too.



最好更改 JTabbedPane 所持有的组件的布局,以允许它们重新调整大小并填补空白,但是为了让我们能够充分了解您可能遇到的问题,请显示您的图像'正在看到和你想要展示的东西。

编辑 3
你说:

want to remove the turquoise looking border thing around the Black JPanel. I don't want to remove the tab. I just want to remove the space between the tab and the component. I want to remove the space around the component that looks blue-ish in the above picture.



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

关于java - JTabbedPane FlowLayout 抛出 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16574302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com