Tôi có một giao diện người dùng trung bình lớn sử dụng BorderLayout; trung tâm là một ngăn chứa thẻ có chứa các bảng khác nhau với các bố trí khác nhau, v.v.Giữ kích thước ưa thích của các thành phần ở giữa BorderLayout
Tôi muốn bảng ở giữa bố cục đường viền này đổi kích thước theo kích thước của cửa sổ, nhưng tôi không muốn các thành phần bên trong bảng điều khiển để kéo dài. Nhãn, hộp tổ hợp, trường văn bản, nút - Tôi muốn chúng giữ nguyên kích thước ưa thích của chúng và cho phép bảng điều khiển chứa chúng giãn ra. Tôi đặt chúng trong một khung cuộn trong trường hợp không gian quá nhỏ cho bảng điều khiển.
Các áp phích khác nhau với các từ vựng đầy màu sắc cảnh báo chống lại sự nguy hiểm của việc sử dụng bất kỳ phương thức setXXXsize() nào trên các thành phần. Đó là những gì tôi làm bây giờ, và tôi muốn tìm hiểu làm thế nào để tránh nó.
GridBagLayout không phù hợp với một số bảng của tôi. Đó là, theo bản chất, định hướng xung quanh các hàng và cột, và không phải tất cả mọi thứ phù hợp với hàng và cột. Tất nhiên tôi có thể tạo ra các hàng và cột nhân tạo để phù hợp với mọi thứ, nhưng tôi thực sự hy vọng Swing có nhiều lựa chọn bố cục hơn thế.
Keo dọc cũng không hoạt động. Tôi đã đưa nó vào SSCE yêu quý của HFOE:
package example;
import java.awt.BorderLayout;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class BorderAndBox extends JFrame
{
public static void main(String args[])
{
BorderAndBox bnb = new BorderAndBox();
bnb.createUI();
bnb.setVisible(true);
}
public void createUI()
{
JPanel borderPanel = new JPanel(new BorderLayout());
JLabel northLabel = new JLabel("Nawth");
borderPanel.add(northLabel, BorderLayout.NORTH);
String[] southComboChoices = { "one", "two", "three" };
JComboBox southCombo = new JComboBox(southComboChoices);
borderPanel.add(southCombo, BorderLayout.SOUTH);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
String[] firstChoices = { "first", "uno", "UN" };
String[] secondChoices = { "second", "dos", "zwei" };
String[] thirdChoices = { "third", "tres", "drei" };
JComboBox firstCombo = new JComboBox(firstChoices);
JComboBox secondCombo = new JComboBox(secondChoices);
JComboBox thirdCombo = new JComboBox(thirdChoices);
centerPanel.add(firstCombo);
centerPanel.add(secondCombo);
centerPanel.add(thirdCombo);
centerPanel.add(Box.createVerticalGlue()); // first attempt; does NOT
// take up available vertical space, instead it appears to create a space
// that is shared equally among the (now) four components of this space.
borderPanel.add(centerPanel, BorderLayout.CENTER);
getContentPane().add(borderPanel);
pack();
}
}
Nếu bạn phóng to cửa sổ, hộp combobox ở giữa sẽ mở rộng; như được viết, một mảnh keo dọc bên dưới chúng cũng phóng to, nhưng không chiếm hết không gian sẵn có. Nó xuất hiện nó được đưa ra nhiều không gian như mỗi người trong số họ.
Vậy cách tốt nhất để tiếp cận điều này là gì?
* ".. SSCE yêu dấu:" * Tôi cũng thích nó. Và đó là SSCCE (2 Cs). ;) –
nó không thể chỉ là một ví dụ nhỏ khép kín? – arcy
* "nó không thể chỉ là một ví dụ nhỏ khép kín?" * [Trích dẫn] (http://sscce.org/#co) một trong những người tôi yêu thích: * "Trong tài liệu này, chính xác (hoặc có thể biên dịch được, đặc biệt liên quan đến mã nguồn máy tính) có nghĩa là đảm bảo rằng ví dụ của bạn phù hợp với các tiêu chuẩn và giao thức được chấp nhận. ”* Điểm phụ đáng chú ý nhất *" Đảm bảo ví dụ của bạn là chính xác. Ví dụ này biên dịch rõ ràng hoặc gây ra thông báo lỗi chính xác muốn được giúp đỡ. "* Mã được biên dịch và cho thấy sự cố, dễ thực hiện. Nó * là * một SSCCE. :) –