2012-09-05 32 views
10

thể trùng lặp:
Swing: How do I set a component height to the container's height?làm thế nào để chia JPanel trong 70% 30%

làm thế nào để chia JPanel như hình ảnh dưới đây có 2 tấm panel1 và panel2 panel1 nên mất 70% và panel2 30% hoặc panel1 nên lớn hơn panel2 ... Tôi đã thử Gridlayout, Border Layout nhưng nó không làm việc. giúp đỡ sẽ được đánh giá cao.

public class TestApplication extends JApplet { 

private static final long serialVersionUID = 1L; 

    JPanel p1,p2; 

    public void init(){   
     setLayout(new GridLayout(3,1)); 
     p1=new JPanel(); 
     p2=new JPanel(); 

     p1.setBackground(Color.RED); 
     p2.setBackground(Color.GREEN); 

     add(p1); 
     add(p2); 
    } 
} 

enter image description here

+2

hình ảnh tải lên đã được tạo ra trong sản xuất sơn :) – madhur

+0

đẹp câu hỏi 1 – mKorbel

+2

Sử dụng GridBagLayout và sử dụng nặng = 0,7 và 0,3 tương ứng –

Trả lời

14

Bạn đã xem là sử dụng một JSplitPane (How to Use Split Panes)?

import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.JApplet; 
import javax.swing.JPanel; 
import javax.swing.JSplitPane; 

public class TestApplication extends JApplet { 

private static final long serialVersionUID = 1L; 

    JPanel p1,p2; 

    @Override 
    public void init(){   
     setLayout(new BorderLayout()); 

     p1=new JPanel(); 
     p2=new JPanel(); 

     p1.setBackground(Color.RED); 
     p2.setBackground(Color.GREEN); 
     JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
     sp.setResizeWeight(0.7); 
     sp.setEnabled(false); 
     sp.setDividerSize(0); 

     sp.add(p1); 
     sp.add(p2); 
     add(sp, BorderLayout.CENTER); 
    } 
} 

enter image description here

+0

GrahamA thanx rất nhiều ... :) – madhur

1

Nếu bạn có một JFrame bên ngoài (hoặc một JPanel) f, bạn có thể áp dụng một BorderLayout và đưa p1 trong NORTH và p2 trong SOUTH. Sau đó, sử dụng

Dimension df = f.getSize(); 

Bạn sẽ nhận được thứ nguyên của vùng chứa bên ngoài (f). Tiếp theo, hãy gọi đến:

void setSize(Dimension d) 

theo cách này:

p1.setSize(new Dimension(df.getWidth(), df.getHeight()*0.7)); 
p2.setSize(new Dimension(df.getWidth(), df.getHeight()*0.3)); 

Cuối cùng, thêm những JPanels để chứa nó.

+0

Nếu bạn sử dụng một LayoutManager, bạn nên không bao giờ gọi setSize. Hoặc sử dụng LayoutManager, các ràng buộc và như một phương sách cuối cùng, bạn có thể ép buộc kích thước pref/min/max, hoặc sử dụng layout tuyệt đối ('null'-layout) và bạn tự gọi setBounds/setLocation/setSize. Trộn cả hai trong cùng một container chỉ tìm kiếm những rắc rối. –

Các vấn đề liên quan