Tôi gặp vấn đề khó chịu với người quản lý bố cục của Java. Tôi có tình huống sau: Trong bảng điều khiển A là hai bảng khác B với bố cục tuyệt đối và C bằng FlowLayout. B được tùy chỉnh cao và có kích thước cố định được đặt qua setPreferredSize
. C phải có cùng một chiều rộng là B nhưng nếu không có chiều cao thay đổi, tùy thuộc vào số lượng thành phần được thêm vào luồng. Kết quả A sau đó sẽ có chiều rộng cố định và A.height + B.height
làm chiều cao - ít nhất đó là những gì tôi muốn.Chiều rộng cố định, chiều cao thay đổi trong JPanel với luồng
Tuy nhiên những gì tôi nhận được là chiều rộng của bảng điều khiển Một không được cố định ở tất cả (ngay cả khi tôi đặt kích thước ưa thích của nó), và các nội dung trong bảng C không tự động gói mà thay vào đó được hiển thị trong một đường dài. Tất nhiên điều này cũng làm cho B có chiều rộng lớn hơn mức cần thiết.
Tôi có thể làm gì để khắc phục điều đó? Có bố cục nào tốt hơn hay tôi phải mô phỏng tất cả bằng cách sử dụng bố cục tuyệt đối?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Test extends JPanel
{
public Test()
{
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel top = new JPanel(null);
top.setBackground(Color.GREEN);
top.setPreferredSize(new Dimension(200, 20));
JPanel flowPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2));
this.add(top);
this.add(flowPanel);
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
}
}
Điều đó thực sự hoạt động khá tốt! Nếu không ai đến với một giải pháp bản địa, đây là những gì tôi sẽ đi với. Cảm ơn bạn! Rất tệ khi các trình quản lý bố cục chuẩn tiếp tục thất bại trong các tình huống chung (ít nhất là với tôi) và bạn luôn kết thúc bằng một tùy chỉnh mới ..:/ – poke
@poke: Đối với tôi, điều này thể hiện một loại thiên vị lựa chọn— Tôi có xu hướng quên rằng bố cục chuẩn thường chỉ hoạt động! 'WrapLayout' cũng là một ví dụ tốt về cách viết trình quản lý của riêng mình. – trashgod