忽略布局边框

时间:2014-03-06 22:51:33

标签: java swing layout border

如何在布局时告诉组件/布局忽略父组件的边框?

例如,我的每边都有一个2px的边框,但它不应该导致内部组件向右和向下移动2px。 (有效地将容器尺寸减小4px宽度和高度)

2 个答案:

答案 0 :(得分:1)

这是一个相当奇怪的要求,所以我会非常谨慎 - 尽量避免这样做。

您可以覆盖边框的插图,这不会影响组件或边框的绘制,只有在绘制组件的位置

LineBorder border = new LineBorder(Color.orange, 10){
    Insets overridenInset = new Insets(0, 0, 0, 0);
    @Override
    public Insets getBorderInsets(Component c) {
        return overridenInset;
    }
};

答案 1 :(得分:1)

使用CompoundBorder

Border outer = new MatteBorder(2, 2, 2, 2, Color.RED);
Border inner = new EmptyBorder(-2, -2, -2, -2);
CompoundBorder border = new CompoundBorder(outer, inner);
panel.setBorder(border);

另一种选择是使用嵌套布局:

JPanel outer = new JPanel( new BorderLayout() );
outer.setBorder( new MatteBorder(2, 2, 2, 2, Color.RED) );
JPanel inner = new JPanel();
outer.add(inner);

是的,这仍将占用与原始方法相同的空间,但至少所有组件都将根据内部面板的大小进行布局。