Java 使Swing JTabbedPane选项卡填满其容器整个宽度的最简单方法

Java 使Swing JTabbedPane选项卡填满其容器整个宽度的最简单方法,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,我在JPanel中有一个JTabbedPane(顶部有水平选项卡),我希望这个JTabbedPane的选项卡适合JPanel的整个宽度,这样,如果只有一个选项卡,选项卡将填充整个宽度;当有两个标签页时,每个标签页都会填满一半,依此类推 使用自定义JComponent作为选项卡的标题并设置PreferredSize没有解决方案,因为JTabbedPanel似乎在标题组件周围放置了某种边框 有没有比扩展和/或重写JTabbedPane的部分/全部更简单的解决方案 (也许我应该补充一点,当我谈论选项卡

我在JPanel中有一个JTabbedPane(顶部有水平选项卡),我希望这个JTabbedPane的选项卡适合JPanel的整个宽度,这样,如果只有一个选项卡,选项卡将填充整个宽度;当有两个标签页时,每个标签页都会填满一半,依此类推

使用自定义JComponent作为选项卡的标题并设置PreferredSize没有解决方案,因为JTabbedPanel似乎在标题组件周围放置了某种边框

有没有比扩展和/或重写JTabbedPane的部分/全部更简单的解决方案

(也许我应该补充一点,当我谈论选项卡时,我指的是这些导航组件,您可以单击它们来切换显示的组件,而不是组件本身。)

测试此代码:

public class Tabs extends javax.swing.JFrame {


    public Tabs() {
        initComponents();
    }


       private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(new java.awt.BorderLayout());

        jPanel2.setLayout(new java.awt.BorderLayout());


        jTabbedPane1.addTab("tab1", jPanel2);


        jPanel3.setLayout(new java.awt.BorderLayout());


        jTabbedPane1.addTab("tab2", jPanel3);

        jPanel1.add(jTabbedPane1, java.awt.BorderLayout.CENTER);

        add(jPanel1);

        pack();
    }


    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Tabs().setVisible(true);
            }
        });
    }


    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JTabbedPane jTabbedPane1;
}

这取决于你愿意走多远。有时候,对于看起来很简单的事情,实际上自己重写整个组件更容易(我写的并不容易,我只是说这通常比修复Swing更容易)。例如,假设您想要OS本机表显示,其中滚动条获取JTable的所有高度,包括JTable头。。。祝你好运。这是一款Swing应用程序,绝对免费。它看起来气喘吁吁的。除了基本上重写一个更好的JTable之外,没有什么可做的。我对你的具体案例一无所知。是的,重写基本上就是我解决问题的方法(使用CardLayout)。但现在它实际上看起来不太专业,所以我想知道是否有一些直接的方法通过JTabbedPane。你在JPanel的布局经理是什么?[适合这项工作的边界布局。]谢谢。我没有想到在标题组件中使用BorderLayout,但它很有效。与其发布两个答案,为什么不简单地编辑你的上一个答案?对不起。我记得下一个答案的建议。@Kohlehydath这个答案不正确!我测试了它,但是标签不能填充帧宽度。为什么这个答案被标记为正确@SimonAndreForsberg如果你说上面的代码是有效的,那么我不同意。因为我只是简单地复制代码并运行它,而选项卡标题并没有填满面板的宽度。如果您正在谈论另一个代码,那么我很乐意看一看(您可以使用:)发送代码)