我正在尝试将流布局应用于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)发布于 2013-05-16 04:26:28
我不认为你可以弄乱一个JTabbedPane的布局。考虑这一点都是没有意义的。它可能有自己的专业布局。
编辑1
事实上,它确实是这样的: TabbedPaneLayout
解决方案:不要弄乱JTabbedPane的布局,当然也不要把它换成不能使用JTabbedPane的另一个布局。
编辑2
你声明:
那么我怎么才能消除它周围的间隙呢?我在组件周围留下了这些空白:我也尝试了其他布局。是啊,他们也会扔。
最好是更改JTabbedPane持有的组件的布局,以允许它们重新调整大小并填充空白,但这样我们就可以完全了解您可能遇到的问题,请显示您所看到的和您试图显示的图像。
编辑3
你声明:
想要移除黑色JPanel周围看起来像青绿色的边框。我不想去掉标签。我只想删除制表符和组件之间的空格。我想删除上面图片中看起来有点蓝色的组件周围的空格。
这可能是一个外观问题,而不是布局问题。至于你最初问题的直接答案,答案是:不要弄乱JTabbedPane布局,句号。对于您正在尝试解决的问题,可以考虑使用不同的L&F,或者如果这不起作用,可以为JTabbedPane编写自己的ui委托。虽然我自己从来没有做过这样的事情。
https://stackoverflow.com/questions/16574302
复制相似问题