2012-03-04 16 views
5

Tôi khá mới đối với Java và tôi đang cố tạo ứng dụng GUI với một số nhãn, nút và trường văn bản. Chương trình khá đơn giản và tôi chỉ muốn sử dụng bố cục mặc định, đó là FlowLayout. Tôi quản lý để đặt và kích thước tất cả mọi thứ tốt, nhưng điều duy nhất dường như không làm việc là sự liên kết. Tôi muốn đặt các nút và các trường văn bản với các sắp xếp nhất định, nhưng bất cứ khi nào tôi đặt căn chỉnh, nó di chuyển văn bản bên trong của bất kỳ đối tượng nào thay vì đối tượng. Ví dụ: tôi đã viết:Java Swing FlowLayout Alignments

button.setHorizontalAlignment(JButton.RIGHT); 

nhưng có vẻ như nó căn chỉnh văn bản bên trong nút thay vì chính nút đó. Có cách nào để căn chỉnh chính nút đó hơn là văn bản bên trong nó không?

Tôi biết công cụ căn chỉnh có thể dễ dàng hơn với kiểu bố cục khác (ví dụ: BoxLayout), nhưng tôi chỉ muốn sử dụng FlowLayout cho trường hợp này, trừ khi không thể căn chỉnh chúng bằng FlowLayout (mà tôi không làm) Tôi nghĩ vậy).

Xin cảm ơn trước.

+2

+1 câu hỏi tốt đẹp, cho Swing là bài câu hỏi tốt hơn với [SSCCE] (http://sscce.org/) – mKorbel

Trả lời

13

Xem hàm tạo FlowLayout(int align).

cấu trúc mới FlowLayout với quy định alignment và vỡ nợ 5 đơn vị khoảng cách ngang và dọc. Giá trị của đối số căn chỉnh phải là một trong số FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER, FlowLayout.LEADING hoặc FlowLayout.TRAILING.

Có vẻ như bạn đang theo dõi FlowLayout.RIGHT như đã thấy trong this answer (hộp kiểm và hộp kiểm ở trên cùng).

+0

CÓ, điều này đã hiệu quả. Tôi rõ ràng cần phải sử dụng các loại bố trí khác để có được sự liên kết tốt hơn, nhưng điều này hoạt động khá tốt. Cảm ơn. – Dennis

+1

Sau đó, tôi sẽ đi cho một bố cục lồng nhau như trên. Mặc dù sự liên kết duy nhất trong đó ngoài bố trí dòng là sự định tâm của hình ảnh trong 'GridBagLayout'. Cái sau không đạt được trong hàm tạo, nhưng bằng cách sử dụng ràng buộc bố trí (hay đúng hơn là, bỏ qua để sử dụng một) khi thêm hình ảnh. –

+0

@AndrewThompson: Khi tôi viết này 'JPanel plafComponents = new JPanel (new FlowLayout (FlowLayout.RIGHT, 3,3)); ', nó cho tôi một lỗi nói rằng không thể tìm thấy biểu tượng, VARIABLE phải hoặc bất cứ điều gì tôi sử dụng. Có gì sai với JDK của tôi không? Tôi có thể sử dụng constructor FlowLayout bình thường mặc dù. Hy vọng bạn có thể tư vấn cho tôi những gì là sai ở cuối của tôi? hoặc tôi sẽ bắt đầu một chủ đề mới cho điều này? –

2

setHorizontalAlignment của AbstractButton đặt sự liên kết ngang của biểu tượngvăn bản không phải là vị trí của các nút. Mặc định của AbstractButton là SwingConstants.CENTER.

Nếu bạn muốn sắp xếp các button..set vị trí trong khi thêm nó vào bảng điều khiển hoặc frame..something như thế này ....

p.add(button, BorderLayout.SOUTH);//using `BorderLayout` 

bố trí dòng chảy thường được sử dụng để sắp xếp các nút trong một bảng điều khiển. Nó sẽ sắp xếp các nút từ trái sang phải cho đến khi không còn nút nào phù hợp trên cùng một dòng.

+0

Tôi không nghĩ rằng công việc này .. Tôi đã thử nó nhưng không có gì thay đổi. Nó nói rằng tham số thứ hai là cho vị trí, nhưng nó không thay đổi bất cứ điều gì vì một lý do nào đó. – Dennis

2

Tôi không nghĩ rằng bạn có thể thực hiện việc này chỉ với FlowLayout.

gợi ý của tôi sẽ là:

  • Hãy xem xét chuyển sang MigLayout mà là một cơ chế bố trí mạnh mẽ hơn nhiều. MigLayout về cơ bản cho phép bạn định vị các thành phần của bạn trong một mạng lưới linh hoạt và bạn có thể đặt căn chỉnh cụ thể của một thành phần trong mỗi ô lưới.
  • Khi bạn muốn căn chỉnh các thành phần phụ, bạn cũng nên đặt chúng bên trong một JPanel lồng nhau. Sau đó, bạn có thể sử dụng bố cục riêng biệt cho JPanel này (BorderLayout có lẽ?) Sẽ cho phép bạn có được căn chỉnh chính xác mà bạn muốn.