2010-04-19 10 views
8

Tôi đang cố gắng xây dựng một cửa sổ GUI trong ứng dụng của mình. Những gì tôi đang cố gắng làm là có một cửa sổ, với một vài nút ở trên cùng, và một vùng văn bản lớn. Một cái gì đó như thế này:Liên kết hỗn hợp với GroupLayout của Java Swing

+--------------------------------------------------+ 
| [button1] [button2]     [button3] | 
| +----------------------------------------------+ | 
| | text area         | | 
| |            | | 
| |            | | 
| |            | | 
| +----------------------------------------------+ | 
+--------------------------------------------------+ 

Tôi gần như ở đó, sử dụng GroupLayout:

layout.setHorizontalGroup(
    layout.createParallelGroup() 
     .addGroup(layout.createSequentialGroup() 
     .addComponent(button1) 
     .addComponent(button2)) 
     .addComponent(closeWindow)) 
     .addComponent(textarea1) 
); 

    layout.setVerticalGroup(
    layout.createSequentialGroup() 
     .addGroup(layout.createParallelGroup() 
     .addComponent(button1) 
     .addComponent(button2) 
     .addComponent(button3)) 
     .addComponent(textarea) 
); 

Vấn đề là điều này kết thúc với button3 thẳng sang bên trái, với hai người kia. Tôi không thể tìm ra cách tôi có thể chỉ định sự liên kết trên chỉ một nút. Tôi có thể thực hiện GroupLayout.Alignment.TRAILING trên toàn bộ thanh nút, nhưng điều đó đánh trúng tất cả 3 nút, điều này cũng không hoàn toàn đúng.

Vậy phương pháp tiếp cận chính xác là gì? Kể từ khi liên kết chỉ áp dụng cho các nhóm song song, tôi không nghĩ rằng có một nhóm ngang với hai nhóm tuần tự trong nó sẽ giúp đỡ?

Tôi đang thiếu gì?

Trả lời

11

Thêm khoảng trống trong nhóm tuần tự của bạn. Để nhóm ngang của bạn như sau:

layout.setVerticalGroup(
    layout.createSequentialGroup() 
     .addGroup(layout.createParallelGroup() 
     .addComponent(button1) 
     .addComponent(button2) 
     .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     .addComponent(button3)) 
     .addComponent(textarea) 
); 

Khoảng cách với các tham số đó đóng vai trò là "lò xo", chiếm hết dung lượng sẵn có.

+0

Nên là "LayoutStyle.ComponentPlacement.RELATED", nhưng ngoài ra, hoạt động tuyệt vời, cảm ơn :) – zigdon

+0

Rất tiếc, bạn nói đúng - Tôi là phiên bản hỗn hợp. Đã sửa. – Etaoin

+0

Xin chào, bạn chỉ nên thêm dòng đó vào nhóm dọc hay cả nhóm ngang? – Timmos

3

Hãy thử thêm:

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE) 

sau khi nút thứ hai. MAX_VALUE sẽ làm cho khoảng cách mở rộng càng nhiều càng tốt.

1

Bạn muốn sử dụng addPreferredGap() chỉ khả dụng trên các nhóm tuần tự. Mã bên dưới cung cấp cho bạn bố cục mong muốn.

layout.setHorizontalGroup(
      layout.createParallelGroup() 
        .addGroup(layout.createSequentialGroup() 
          .addComponent(button1) 
          .addComponent(button2) 
          .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) 
          .addComponent(button3)) 
        .addComponent(textArea) 
    ); 
    layout.setVerticalGroup(
      layout.createSequentialGroup() 
        .addGroup(layout.createParallelGroup() 
          .addComponent(button1) 
          .addComponent(button2) 
          .addComponent(button3)) 
        .addComponent(textArea) 
    );