2011-01-14 20 views
7

Có gì đó không có ở đây. Tôi đang cố gắng để có được nút ngoài cùng bên phải (có nhãn "trợ giúp" trong ví dụ bên dưới) để được căn phải vào JFrame và các nút lớn để có chiều rộng của chúng được gắn với JFrame nhưng ít nhất là 180px mỗi. Tôi đã nhận được hạn chế về nút lớn để hoạt động, nhưng không phải là căn chỉnh đúng.miglayout: không thể căn phải làm việc

alt text

Tôi nghĩ sự liên kết ngay được thực hiện bằng cách gapbefore push (như trong this other SO question), nhưng tôi không thể hình dung nó ra.

Có ai có thể giúp tôi không?

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import net.miginfocom.swing.MigLayout; 

public class RightAlignQuestion { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("right align question"); 
     JPanel mainPanel = new JPanel(); 
     frame.setContentPane(mainPanel); 

     mainPanel.setLayout(new MigLayout("insets 0", "[grow]", "")); 

     JPanel topPanel = new JPanel(); 
     topPanel.setLayout(new MigLayout("", "[][][][]", "")); 
     for (int i = 0; i < 3; ++i) 
      topPanel.add(new JButton("button"+i), ""); 
     topPanel.add(new JButton("help"), "gapbefore push, wrap"); 
     topPanel.add(new JButton("big button"), "span 3, grow"); 

     JPanel bottomPanel = new JPanel(); 
     bottomPanel.setLayout(new MigLayout("", 
       "[180:180:,grow][180:180:,grow]","100:")); 
     bottomPanel.add(new JButton("tweedledee"), "grow"); 
     bottomPanel.add(new JButton("tweedledum"), "grow"); 

     mainPanel.add(topPanel, "grow, wrap"); 
     mainPanel.add(bottomPanel, "grow"); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

Tôi không biết đủ về MigLayout để trả lời câu hỏi này, nhưng hãy thử đặt đường viền trên topPanel để đảm bảo đường viền trên thực tế rộng như cửa sổ. Nếu không, điều đó sẽ giải thích tại sao Trợ giúp không được căn phải. –

Trả lời

7

đừng bận tâm, tôi đã nhận nó: trông giống như cần phải có một hạn chế khoảng cách về spec cột, không phải ở cấp thành phần:

topPanel.setLayout(new MigLayout("", "[][][]push[]", "")); 
+0

Tôi đã làm điều này trong ứng dụng của riêng tôi với một "span, gapleft push" – Rayne

+0

'panel.add (nút," cell 2 0, gapleft push ");' đã làm thủ thuật cho tôi. Hãy nhớ rằng điều này chỉ được thực hiện khi bạn thêm thành phần. – FaithReaper

3

một/cách sạch dễ dàng hơn nhiều (IMOH) đang sử dụng các ràng buộc thành phần và thực hiện

topPanel.add (new JButton ("help"), "push, al right, wrap");

Đẩy sẽ đẩy ô ra ngoài khi cửa sổ trải dài nhưng bạn cần phải thông báo cho thành phần đó tự ràng buộc chính nó ở bên phải của ô. Bạn có thể đạt được ở trên với mã sau đây.

JPanel topPanel = new JPanel(); 
    frame.setContentPane(topPanel); 

    for (int i = 0; i < 3; ++i) 
     topPanel.add(new JButton("button"+i), ""); 
    topPanel.add(new JButton("help"), "push, al right, wrap"); 


    topPanel.add(new JButton("big button"), "span 3, grow, wrap"); 

    topPanel.add(new JButton("tweedledee"), "span, split2,grow, w 180, h 100"); 
    topPanel.add(new JButton("tweedledum"), "w 180, h 100, grow"); 
Các vấn đề liên quan