JTabbedPane不会填满整个JPanel

时间:2013-11-29 15:05:15

标签: java swing

我正在为我的JPanel添加一个JTabbedPane,我可以让它延伸到边缘,但JTabbedPane仍然在它周围留下一个丑陋的边界。我认为你刚刚与窗口边缘合并的边缘。有谁知道如何做到这一点?这是我所看到的图片。

enter image description here

这是我创建布局的方法:

public class MainFrame extends JFrame {
    private static final long serialVersionUID = 6112493789711533870L;
    private final int FRAME_WIDTH = 720;
    private final int FRAME_HEIGHT = 405;

    private JPanel mainLayout;
    GridBagConstraints c = new GridBagConstraints();

    public MainFrame(String t) {
        super(t);
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        add(createLayout());
    }

    public JPanel createLayout() {
        this.mainLayout = new JPanel(new GridBagLayout());
        JTabbedPane mainTabs = new JTabbedPane();
        mainTabs.setTabPlacement(JTabbedPane.LEFT);

        JComponent projectPanel = makeTextArea();
        mainTabs.addTab("Projects", projectPanel);

        JComponent tasksPanel = makeTextArea();
        mainTabs.addTab("Tasks", tasksPanel);

        JComponent optionsPanel = makeTextArea();
        mainTabs.addTab("Options", optionsPanel);

        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1.0;
        c.weighty = 1.0;
        c.insets = new Insets(0,0,0,0);

        mainLayout.add(mainTabs, c);
        return mainLayout;
    }

    private JScrollPane makeTextArea() {
        JTextArea textArea = new JTextArea();
        textArea.setEditable(true);

        JScrollPane scrollTextArea = new JScrollPane(textArea);
        scrollTextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        return scrollTextArea;
    }
} 

3 个答案:

答案 0 :(得分:1)

你无法真正删除该边框。它是JTabbedPane UI的一部分。然而,我总是遇到的问题恰恰相反:Nimbus的外观和感觉是令人愤怒的,唯一一个的标签页边框。因此,如果您真的想避开边框,可以在应用程序启动时运行此代码一次使用Nimbus:

try {
    UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable t) {
    throw new RuntimeException(t);
}

否则,我会建议在组件周围添加一个额外的空边框,这样细边框看起来就不那么难了。

编辑:除了上述内容之外,尝试通过在makeTextArea()中添加此内容来删除JScrollPane的边框:

scrollTextArea.setBorder(BorderFactory.createEmptyBorder());

这就是我现在看到的:http://i.stack.imgur.com/afr8n.png

答案 1 :(得分:0)

这取决于使用的外观,例如尝试

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

使用系统外观。它仍然有边界,但它正在变得更好。如果你想完全摆脱边框,你需要改变组件的外观。

答案 2 :(得分:0)

您可以将JTabbedPane直接添加到您的JFrame中......为什么还需要额外的JPanel?