2010-11-22 40 views
6

Tôi có ba JPanels được vẽ lên JFrame. Đây là tất cả các thiết lập để sử dụng FlowLayout mặc định. Tôi muốn cho những thứ này ở trên một cột khác trong một cột.Java Swing: FlowLayout JPanels đang ngồi cạnh nhau?

Tuy nhiên, tôi thấy rằng chúng đang nổi bên cạnh nhau trên cùng một dòng, miễn là các thành phần bên trong chúng.

Chiều rộng tự nhiên của FlowLayout JPanel là tổng của nội dung của nó? Nếu vậy, có cách nào để buộc chiều rộng của khu vực phải là chiều rộng của JFrame không?

Thật thú vị, tôi thấy rằng, nếu các bảng "trên cùng" và "dưới cùng" có nội dung trải rộng toàn bộ chiều rộng của JFrame và bảng điều khiển "ở giữa" bị bỏ trống, bảng điều khiển "ở giữa" sẽ tạo khoảng cách giữa hai, giống như cái cũ "

của html.

Cảm ơn,

Bến

Trả lời

1

bạn có thể sử dụng GridLayout để tạo YxZ lưới trong một thành phần. để xây dựng bố trí chính xác hơn bạn có thể sử dụng GridBagLayout cung cấp toàn quyền kiểm soát po sitioning và kích thước cho các thành phần lồng nhau.

0

Tôi luôn đi với NetBeans. Kể từ khi, tôi có thể làm cho thiết kế miễn phí với ra có bất kỳ rắc rối của việc đặt các thành phần trên JPanel hoặc JFrame :) Bạn có thể xem xét nó.

2

Nếu bạn muốn tạo bố cục dọc, bạn có thể muốn xem xét sử dụng BoxLayout cho vùng chứa kèm theo. Điều này có thể được thiết lập để bố trí các thành phần dọc theo trục y.

4

Như Jim đã nêu, BoxLayout là lựa chọn đúng nếu bạn cần căn chỉnh các thành phần thẳng hàng.

Dưới đây là một ví dụ:

import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** 
* 
* @author nicholasdunn 
*/ 
public class BoxLayoutExample extends JPanel { 

    public BoxLayoutExample() { 
     JPanel topPanel = new JPanel(); 
     JPanel middlePanel = new JPanel(); 
     JPanel bottomPanel = new JPanel(); 

     topPanel.setBorder(BorderFactory.createEtchedBorder()); 
     middlePanel.setBorder(BorderFactory.createEtchedBorder()); 
     bottomPanel.setBorder(BorderFactory.createEtchedBorder()); 

     topPanel.add(new JLabel("Top")); 
     middlePanel.add(new JLabel("Middle")); 
     bottomPanel.add(new JLabel("Bottom")); 

     BoxLayout boxLayout = new BoxLayout(this, BoxLayout.PAGE_AXIS); 
     setLayout(boxLayout); 
     add(topPanel); 
     add(middlePanel); 
     add(bottomPanel); 

    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(""); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new BoxLayoutExample(); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

alt text

Bạn sẽ làm tốt để thực sự đọc qua introduction to layout managers hiểu các thiết lập cơ bản của LayoutManagers. Khi nói đến thời gian để bố trí phức tạp, hãy sử dụng MigLayout thay vì cố gắng tìm hiểu GridBagLayout - bạn sẽ cảm ơn tôi.