Tôi không thể tìm ra cách để thay đổi kích thước một số thành phần trong GUI xoay. Một số nhãn tùy chỉnh đang được thêm vào FlowLayout không hoạt động như thế nào khi thay đổi kích thước hộp thoại. Bảng điều khiển đang được xây dựng bằng cách sử dụng khung biểu mẫu jgoodies.Nhận kích thước ưa thích của flowlayout nhiều dòng
Nếu sử dụng lệnh này, các FlowLayout đang được thêm vào xy (3, y)
FormLayout layout = new FormLayout("r:d, 5px, f:d:g", // columns
"p, p, 5px, p, 5px, p") // rows
Các FlowLayout mở rộng và một thanh cuộn xuất hiện
Nếu sử dụng
FormLayout layout = new FormLayout("r:d, 5px, f:10:g", // columns
"p, p, 5px, p, 5px, p") // rows
FlowLayout sử dụng không gian có sẵn và các mục trên dòng thứ hai biến mất
Tôi muốn mở rộng chiều cao của mỗi hàng có chứa FlowLayout đến chiều cao hiện tại của thành phần. Thật không may, kích thước ưa thích luôn luôn tương ứng với hight cho một hàng duy nhất.
Bố cục khác có phù hợp hơn không? Văn bản in đậm ở bên trái phải được căn phải, tiếp theo là FlowLayout.
[sửa] Sau khi cố gắng tìm ra cách để làm điều này trong nhiều tuần, câu hỏi thực tế có thể được nối lại như thế này:
Một tập hợp các nhãn đã được thêm vào một JPanel. JPanel này nên sử dụng tất cả không gian có sẵn theo chiều ngang (kích thước đối thoại trừ chiều rộng của nhãn tên thẻ) và mở rộng khi cần theo chiều dọc. Nếu chiều cao của JPanel lớn hơn thì đối thoại, một thanh cuộn dọc sẽ xuất hiện (thanh cuộn ngang không bao giờ được nhìn thấy). Cuộc đối thoại có thể hiển thị nhiều JPanels sẽ được hiển thị sau lần khác (theo chiều dọc).
Dưới đây là một nỗ lực sử dụng GridBagLayout và WrapLayout:
public class GridBagLayoutTagPanel extends JPanel {
private static final long serialVersionUID = -441746014057882848L;
private final int NB_TAGS = 5;
public GridBagLayoutTagPanel() {
setLayout(new GridLayout());
JPanel pTags = new JPanel(new GridBagLayout());
pTags.setBackground(Color.ORANGE);
GridBagConstraints c = new GridBagConstraints();
c.ipadx = 5;
c.ipady = 5;
int rowIndex = 0;
for (int i = 0; i < NB_TAGS; i++) {
//add tag name
JLabel lTagName = new JLabel(String.format("Tag %s:", i));
lTagName.setFont(lTagName.getFont().deriveFont(Font.BOLD));
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = rowIndex++;
pTags.add(lTagName, c);
//add tag values
JPanel pTag = new JPanel(new BorderLayout());
pTag.add(new JLabel("+"), BorderLayout.LINE_START); //label used to add new tags
pTag.add(getWrapPanel(), BorderLayout.CENTER); //the list of tag values
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
pTags.add(pTag, c);
}
//JScrollPane sp = new JScrollPane(pTags);
//sp.setBorder(BorderFactory.createEmptyBorder());
add(pTags);
}
private static JPanel getWrapPanel() {
JPanel p = new JPanel(new WrapLayout(FlowLayout.LEFT, 5, 0));
for (int i = 0; i < 50; i++) {
p.add(new JLabel("t" + i));
}
return p;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(new GridBagLayoutTagPanel());
f.setSize(new Dimension(500, 300));
f.setVisible(true);
}
}
đẹp câu hỏi 1 – mKorbel
bạn đã thử sử dụng lớp 'FormDebugUtils' và/hoặc 'FormDebugPanel'? Các công cụ gỡ lỗi này đã giúp tôi một vài lần để xem điều gì đang thực sự xảy ra trên – Robin
Tại sao bạn chỉ ra 'FlowLayout' khi mã chỉ rõ rằng' FormLayout' được sử dụng? 'FormLayout! = FlowLayout'. –