2010-05-21 84 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