Tôi sử dụng nhiều thành phần có viền được vẽ. Có cách nào dễ dàng để thêm một lề vào thành phần sao cho các đường viền không được vẽ quá gần nhau?Làm cách nào để thêm lề ngoài đường viền của thành phần trong Swing?
Trả lời
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
.
Một cách khác để có được những gì bạn muốn là:
- được dòng điện
Border
của thành phần bạn - nếu
null
, thiết lập mộtEmptyBorder
cho thành phần bạn - nếu không
null
, tạo ra một mớiCompoundBorder
(với sốEmptyBorder
vàBorder
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.
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
- 1. Đường viền trong suốt của JTextField trong Swing
- 2. Làm cách nào để tạo đường viền chấm chấm trên phần tử Đường viền trong Silverlight?
- 3. Cách thêm đường viền canvas
- 4. Tạo một phần tử có đường viền, «stiched» đến đường viền ngoài của các đối tượng bên trong
- 5. Chiều cao đầy đủ của phần tử html (div) bao gồm đường viền, đệm và lề?
- 6. Làm cách nào để thêm đường viền 1px vào div có chiều rộng là phần trăm?
- 7. Làm cách nào để tôi thụt lề một số thành phần bằng cách sử dụng bố cục Java Swing
- 8. GridView rows lề ngoài
- 9. Làm cách nào để tạo đường viền xung quanh các phần tbody/thead của bảng?
- 10. Làm cách nào để xóa đường viền ButtonChrome (khi xác định mẫu của đường viền)?
- 11. Làm thế nào để lặp lại thêm các thành phần vào một nhóm ParallelGroup Swing GroupLayout?
- 12. Khủng bố lề CSS; Ký quỹ thêm khoảng cách bên ngoài phần tử cha
- 13. Làm cách nào để xóa đường viền khỏi Hộp thoại?
- 14. Làm cách nào để thay đổi màu đường viền (hoặc xóa đường viền) của điều khiển PropertyGrid?
- 15. Làm cách nào để thêm đường viền vào tất cả bốn bên của trang trình duyệt
- 16. Cách tạo thành phần Swing tùy chỉnh
- 17. Blackberry - Cách thêm đường viền vào BasicEditField?
- 18. Twitter bootstrap: làm thế nào để thêm lề bên?
- 19. Làm cách nào để tạo đường viền trong UIButton?
- 20. Làm thế nào để kết xuất phần trong các thành phần Swing
- 21. Thêm đường viền bảng trong jasperreports
- 22. CSS: Lề đầu khi cha mẹ không có đường viền
- 23. java swing tự động thêm các thành phần
- 24. Làm cách nào để có được bán kính đường viền từ một phần tử bằng jQuery?
- 25. Làm cách nào để đặt đường viền gradient trên UIView?
- 26. Thêm đường viền vào ảnh bằng python
- 27. iOS: Cách cắt hình ảnh thành các phần hữu ích (xóa đường viền trong suốt)
- 28. Làm cách nào để xóa "Đường viền chấm" khi nhấp?
- 29. Làm cách nào để làm tròn các góc của đường viền bảng iTextSharp?
- 30. Làm thế nào để loại bỏ đường viền 3d (chìm) từ thành phần MDIClient trong biểu mẫu MDI cha mẹ?
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
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? –
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