2010-05-21 160 views

回答

3

这通常是使用布局管理器完成的。例如,如果您使用的是GridBagLayout,则可以在GridBagConstraint对象上将insets设置为所需的值。

另一种选择是使用Box对象并添加水平或垂直结构。对于Box.createVerticalStrut(int width)和类似createHorizontalStrutjavadoc

+0

是的,我可以使用'盒子',但如果我有很多盒子边缘,代码将会非常难看...... – Jonas 2010-05-21 15:20:16

+0

您是否尝试过使用插页?你目前使用什么布局?你的显示器有多复杂? – 2010-05-21 15:22:36

+0

布局很复杂,它是一个Invoice类,它实现了'Printable',所以我使用了许多不同的布局管理器,'SpringLayout','BorderLayout','BoxLayout'等......我会尝试使用Insets,谢谢。 – Jonas 2010-05-21 15:28:51

14

另一种方式得到你想要的是:

  1. 让您 组件
  2. 如果null目前Border,为您 组件设置EmptyBorder
  3. 如果不是null,创建新的 CompoundBorder(与EmptyBorder 和当前Border的 分量),并将其设置为 组件

在代码中,这应该是一个(抱歉,我没有测试过):

Border current = component.getBorder(); 
Border empty = new EmptyBorder(top, left, bottom right); 
if (current == null) 
{ 
    component.setBorder(empty); 
} 
else 
{ 
    component.setBorder(new CompoundBorder(empty, current)); 
} 

其中:

  • 组件是Swing组件到 您要添加一个保证金
  • 顶部,左侧,底部,右侧是 像素数量要围绕 您的组件添加

注意,此方法可能对窗体布局的冲击(大小,对齐),这取决于LayoutManager您使用。但我认为这值得尝试。

+0

这种方法为我创造了不透明的边框,而不是透明的边框。这是一个问题。我使用了一个修改版本:不是在组件上设置边框,而是创建一个新面板并在其上设置边框,然后将该组件添加到该面板。这样做后,边界透明如预期。 @jfpoilpret你能更新你的答案吗? – Loduwijk 2016-11-11 13:38:25