为什么自定义选项卡的边框没有覆盖JTabbedPane中的标准选项卡边框?

时间:2014-04-28 11:05:32

标签: java swing jtabbedpane

我的自定义标签组件的边框不会覆盖标签本身的边框。

相反,我的边框仅在标签文本周围。要查看有什么问题,请运行此演示:

public class TabBoundsDemo extends JTabbedPane {
    Border lineBorder = BorderFactory.createLineBorder(Color.RED, 2);

    public TabBoundsDemo() {
        super(TOP, WRAP_TAB_LAYOUT);

        for (int i = 0; i < 16; i++) {
            TabComponent tab = new TabComponent("tab " + i);
            super.addTab(null, new JLabel("label" + i));
            super.setTabComponentAt(i, tab);
        }

        super.setPreferredSize(new Dimension(300, 300));

    }

    class TabComponent extends JLabel {

        public TabComponent(String text) {
            super(text);
            super.setBorder(lineBorder);
            super.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    int tabIndex = getTabIndexAtMouseEvent(e);
                    System.out.println("tabIndex=" + tabIndex);

                }
            });
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TabBoundsDemo());
        frame.pack();
        frame.setVisible(true);
    }
}

所以我希望我的红色边框位于标准标签边框的位置。目前它只是围绕着头衔。

谢谢!

1 个答案:

答案 0 :(得分:2)

在下面的构造函数中添加以下代码&#34; super(TOP,WRAP_TAB_LAYOUT);&#34;如果有帮助,请告诉我们。

 setUI( new BasicTabbedPaneUI() {
               @Override
               protected void installDefaults() {
                   super.installDefaults();
                   highlight = Color.pink;
                   lightHighlight = Color.green;
                   shadow = Color.red;
                   darkShadow = Color.cyan;
                   focus = Color.yellow;
               }
            } );