2010-05-21 28 views

Trả lời

3

Việc này thường được thực hiện bằng trình quản lý bố cục của bạn. Ví dụ: nếu bạn đang sử dụng GridBagLayout, bạn sẽ đặt insets trên đối tượng GridBagConstraint thành giá trị mong muốn.

Một tùy chọn khác là sử dụng đối tượng Box và thêm cấu trúc ngang hoặc dọc. Xem javadoc cho Box.createVerticalStrut(int width) và tương tự createHorizontalStrut.

+0

Có, tôi có thể sử dụng 'Box' nhưng mã sẽ rất xấu xí nếu tôi có nhiều hộp-lề ... – Jonas

+0

Bạn đã thử sử dụng insets? Bạn hiện đang sử dụng bố cục nào? Màn hình của bạn phức tạp đến mức nào? –

+0

Cách bố trí phức tạp, đó là lớp Invoice thực hiện 'Printable', vì vậy tôi sử dụng nhiều layoutmanagers khác nhau,' SpringLayout', 'BorderLayout',' BoxLayout' và vân vân ... Tôi sẽ cố gắng sử dụng Insets, cảm ơn. – Jonas

14

Một cách khác để có được những gì bạn muốn là:

  1. được dòng điện Border của thành phần bạn
  2. nếu null, thiết lập một EmptyBorder cho thành phần bạn
  3. nếu không null, tạo ra một mới CompoundBorder (với số EmptyBorderBorder hiện tại của thành phần) và thiết lập nó cho phần

Trong mã, mà nên xem xét như thế (xin lỗi tôi đã không kiểm tra nó):

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)); 
} 

đâu:

  • thành phần là thành phần Swing tới số mà bạn muốn thêm một lề
  • trên cùng, bên trái, dưới cùng, bên phải là số tiền pixel bạn muốn thêm khoảng thành phần của bạn

Lưu ý rằng phương pháp này có thể có tác động (kích thước, liên kết) vào cách bố trí hình thức, tùy thuộc vào LayoutManager bạn đang sử dụng. Nhưng tôi nghĩ rằng nó là giá trị cố gắng.

+0

Phương pháp này đã tạo ra các đường viền mờ đục đối với tôi, không phải là đường viền trong suốt. Đây là một vấn đề. Tôi đã sử dụng phiên bản đã sửa đổi: thay vì đặt đường viền trên thành phần, hãy tạo bảng điều khiển mới và đặt đường viền trên đó thay thế và thêm thành phần vào bảng điều khiển đó. Sau khi làm điều này, biên giới trong suốt như mong đợi. @jfpoilpret Bạn có thể cập nhật câu trả lời của mình không? – Loduwijk

Các vấn đề liên quan