java - JTabbedPane 不会填满整个 JPanel

标签 java swing

我正在向 JPanel 添加一个 JTabbedPane,我可以让它拉伸(stretch)到边缘,但 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;
    }
} 

最佳答案

你无法真正删除该边框。它是 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());

这就是我现在看到的:/image/afr8n.png

关于java - JTabbedPane 不会填满整个 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288577/

相关文章:

Java 要求覆盖 jfilechooser

java - 如何从 Swing 与 Servlet 进行通信

java - 在 GroupLayout 中设置 JPanel 的大小

java - 不能对 Double.MAX_VALUE Java 使用减法运算符

java - 以编程方式创建编辑文本并将其对齐到 TextView 的右侧

java - 处理 ByteToMessageDecoder 中的异常

java - 绘制背景图像

java - 使用 Saxon 和 XSLT 转换 JDOM XML 文档

java - 如何从 JSF 页面访问 get First() 和 get Last()?

java - 在 Java 程序 GapContent$MarkData 中建立内存