JTabbedPane为什么只有当我有多个标签时才有额外的填充? (代码和图片)

时间:2013-10-02 17:44:37

标签: java swing jpanel jtabbedpane

我有一个JTabbed窗格,它有不同数量的标签。当标签的数量大于4时,我会在每个标签面板的底部获得额外的间距/填充。下面的图片显示了这一点(在左侧您可以看到额外的间距,在右侧您看不到额外的间距)。

enter image description here

以下是我用来获取这些图片的确切代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class DialogTest {

    public static void main(String[] args) {
        new DialogTest();
    }

    public DialogTest() {
        JDialog dialog = new MyDialog();
        dialog.pack();
        dialog.setVisible(true);
    }

    class MyDialog extends JDialog {

        public MyDialog() {
            super(null, ModalityType.APPLICATION_MODAL);

            final JTabbedPane tabs = new JTabbedPane();
            final int numTabs = Integer.parseInt(JOptionPane.showInputDialog("Number of tabs:"));

            setPreferredSize(new Dimension(400, 200));

            for (int i = 1; i <= numTabs; i++) {
                tabs.addTab("Tab"+i, new MyPanel(i));
            }

            setLayout(new BorderLayout());
            add(tabs, BorderLayout.NORTH);
        }
    }

    class MyPanel extends JPanel {
        public MyPanel(int text) {
            final JLabel label = new JLabel("THIS IS A PANEL" + text);
            label.setFont(label.getFont().deriveFont(18f));
            label.setBackground(Color.cyan);
            label.setOpaque(true);

            add(label);
            setBackground(Color.red);
        }   
    }
}

我尝试了很多东西,包括许多不同的布局管理器。我不能为我的生活摆脱那个额外的间距。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:2)

final JTabbedPane tabs = new JTabbedPane();
tabs.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); // ADD THIS!

另一个示例表现的原因是窗格将标签包装到下一行&amp;我们假设,一旦我们超越了可能会自然地显示在一行中的多个标签,它必须增加首选大小以包含额外的标签行。