Hi Tôi đang sử dụng một BoxLayout
để ngăn xếp JPanel
s trên đầu trang của mỗi khác (BoxLayout.Y_AXIS
), ví dụ nếu mẹ tôi JPanel
có chiều cao 500 pixel và tôi thêm hai tấm pin con với nó cả hai chiều cao 100 pixel. Các BoxLayout
kéo dài chúng để họ cùng nhau chiếm không gian 500px. Có ai biết cách tắt tính năng này không?BoxLayout trải dài thành phần để phù hợp với bảng điều khiển cha mẹ
Trả lời
Sử dụng GridBagLayout để thay thế. Bạn có quyền kiểm soát nhiều hơn đối với giao diện người dùng của mình.
Nhưng nếu bạn muốn sử dụng BoxLayout vẫn còn, và không muốn chúng căng ra, bạn có thể kiểm tra bằng cách sử dụng invisible component fillers như khu vực cứng nhắc, keo và chất độn.
Nếu bỏ phiếu bầu cho tôi, vui lòng cung cấp lý do – Ascalonian
Hãy nhớ xem phần "Horizontal Glue" trong liên kết được đăng. Rất hữu ích. – FuriousFolder
Bảng của bạn đang kéo dài vì BoxLayout không hạn chế từng bảng theo kích thước ưa thích của nó. Bạn cần phải tìm các bố trí mà tôn trọng kích thước ưa thích của một thành phần, như các vị trí NORTH và SOUTH của BorderLayout.
Hãy thử điều này:
- Tạo một JPanel với một BorderLayout. Thêm thành phần con của bạn là NORTH trong JPanel này.
- Tạo một JPanel thứ hai cho thành phần con khác, thêm nó làm NORTH của BorderLayout
- Thêm hai JPanels vào BoxLayout của bạn.
Code:
JPanel panel1 = new JPanel(new BorderLayout());
panel1.add(component1, BorderLayout.NORTH);
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add(component2, BorderLayout.NORTH);
JPanel boxPanel = new JPanel();
BoxLayout boxLayout = new BoxLayout(boxPanel, BoxLayout.Y_AXIS);
boxPanel.setLayout(boxLayout);
boxPanel.add(panel1);
boxPanel.add(panel2);
Tôi thích giải pháp này bởi vì nó tránh rối tung với gridbag và sửa đổi các thành phần bản thân cả hai đều là một lợi thế lớn. –
Bí quyết là, như các câu trả lời trước đã đề cập, sử dụng keo, chất độn, và các khu vực cứng nhắc trong cách bố trí hộp. Tuy nhiên, không giống như responder đó, tôi khuyên bạn nên gắn bó với BoxLayout - bạn có thể thực hiện hầu hết các giao diện người dùng đơn giản dễ dàng hơn với Box so với Grid Bag; và sức mạnh bổ sung không mua cho bạn nhiều trong hộp thoại điển hình của bạn.
Trong thành ngữ cũ, đây là những thứ như Box.createHorizontalStrut (int x) và Box.createHorizontalGlue(); ý tưởng là bạn đặt một thanh chống giữa các thành phần đầu tiên và thứ hai của bạn và sau đó thêm một keo sau khi thứ hai. ("strut" = "vùng cứng nhắc" ngày nay).
Tôi sẽ đồng ý với điều đó cho mục đích xếp chồng chung, GridBagLayout có thể quá mức cần thiết. Chỉ cần gợi ý nếu anh ta tiến lên. – Ascalonian
Tôi đã thử đặt một khu vực cứng nhắc giữa hai tấm con và keo thẳng đứng sau tấm thứ hai, đặt các tấm vẫn đang được kéo dài: s – Aly
Không có điều gì như là quá mức cần thiết :) – willcodejavaforfood
BoxLayout là một trong số ít người quản lý bố cục tôn trọng kích thước tối thiểu và tối đa của một thành phần. Vì vậy, nếu bạn muốn ngăn không cho bảng kéo giãn, bạn có thể sử dụng:
panel.setMaximumSize(panel.getPreferredSize());
Điều này có thể đã được một thời gian trước đây, nhưng là sử dụng một phương pháp getPreferredSize() ghi đè? – MikeM
@MikeM, không, vì bảng điều khiển dựa vào trình quản lý bố cục để trả lại kích thước ưa thích. Trên thực tế, một giải pháp tốt hơn là mở rộng JPanel và ghi đè phương thức 'getMaximumSize()' để trả về giá trị từ phương thức 'getPreferredSize()'. Bằng cách này, kích thước tối đa sẽ được tính toán động trong trường hợp kích thước ưa thích tự động thay đổi. – camickr
Thú vị, cảm ơn. – MikeM
Điều này có vẻ hoạt động hoàn toàn tốt ... bằng cách sử dụng BoxLayout, như bạn muốn.
this.setLayout(new FlowLayout()); // this being the JFrame
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setPreferredSize(new Dimension(500, 500));
panel.setBackground(Color.orange);
this.add(panel); // add the parent to the JFrame
JPanel pnlChild1 = new JPanel();
pnlChild1.setBackground(Color.cyan);
pnlChild1.setMaximumSize(new Dimension(200, 100));
JPanel pnlChild2 = new JPanel();
pnlChild2.setBackground(Color.magenta);
pnlChild2.setMaximumSize(new Dimension(200, 100));
panel.add(pnlChild1);
panel.add(pnlChild2);
- 1. java Liên kết của bảng điều khiển BoxLayout
- 2. Xem trong ScrollView không phù hợp với cha mẹ như được cấu hình
- 3. Chuột điều khiển dành cho cha mẹ Nhập/Rời khỏi sự kiện Với điều khiển con
- 4. Làm thế nào tôi có thể đảm bảo một DIV trải dài để phù hợp với nội dung của nó?
- 5. Điều khiển 'xxx' không có cửa sổ cha mẹ
- 6. Buộc trình điều khiển cho phù hợp với thiết bị
- 7. Chèn phần tử div làm cha mẹ
- 8. Vô hiệu hóa Bảng điều khiển dành cho cha mẹ, trong khi vẫn giữ bảng con được bật
- 9. Bảng điều khiển ExtJs - thêm các thành phần động
- 10. Phần tử XPath chứa thuộc tính và cha mẹ của cha mẹ có thuộc tính khác
- 11. Truy cập kiểm soát cha mẹ từ điều khiển con - ASP.NET C#
- 12. Cảnh đồ họa Qt kéo dài để phù hợp với
- 13. SWT: Bảng có các ô trải dài cột
- 14. Làm cách nào để phù hợp với tiêu đề dài?
- 15. Làm thế nào để phù hợp với một chuỗi dài thành một JLabel
- 16. Bảng điều khiển tùy chỉnh với công cụ bố cục
- 17. CSS: cách tạo con phù hợp với chiều rộng của bố mẹ
- 18. Sử dụng ngăn chứa bộ điều khiển chế độ xem, trẻ em mất cha mẹ
- 19. Định dạng lại Dữ liệu Bảng điều khiển Định dạng Rộng thành Định dạng Dài
- 20. Scala: Vẽ bảng thành bàn điều khiển
- 21. Truy cập thuộc tính trang cha mẹ từ điều khiển người dùng
- 22. Không tìm thấy trình điều khiển phù hợp (SQLite)
- 23. Thay đổi kích thước bảng điều khiển để phù hợp với các phần tử có trong các cửa sổ biểu mẫu
- 24. Phù hợp với hậu duệ thứ bậc phù hợp với bộ chọn jQuery
- 25. WPF cửa sổ chủ đề điều khiển để phù hợp với những người Telerik
- 26. Vị trí CSS tuyệt đối đối với phần tử cha mẹ hoạt động tương đối
- 27. Lấy tên của điều khiển người dùng cha mẹ WPF C#
- 28. tên bảng phù hợp với bảng hiển thị
- 29. Skip thực hiện <ui:include> khi thành phần UI cha mẹ không được trả lại
- 30. Truy cập cửa sổ cha mẹ từ Điều khiển người dùng
How are you sepcifying kích thước của tấm đứa trẻ? – Ascalonian
Với panel.setPrefferedSize và panel.setMinimumSize cả hai bằng cách sử dụng cùng một Dimension – Aly