2012-09-05 13 views
10

Mögliche Duplizieren:
Swing: How do I set a component height to the container's height?Wie teilen i JPanel in 70% 30%

Wie teilen i JPanel wie das Bild unten gibt es 2 Platten panel1 und panel2 panel1 sollte 70% und panel2 30% oder panel1 sollte größer sein als panel2 ... Ich habe versucht, Gridlayout, Border Layout, aber es funktioniert nicht.seine Hilfe würde geschätzt werden.

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

Bild hochgeladen wurde in Farbe erstellt :) – madhur

+0

schöne Frage +1 – mKorbel

+2

Verwendung GridBagLayout und verwenden gewichtige = 0,7 bzw. 0,3 –

Antwort

14

Haben Sie darüber nachgedacht, einen JSplitPane (How to Use Split Panes) mit?

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 viel ... :) – madhur

1

Wenn Sie ein externes JFrame (oder eine andere JPanel) f haben, können Sie einen Border anwenden und p1 in Nord- und p2 in SOUTH setzen. Verwenden Sie dann

Dimension df = f.getSize(); 

Sie erhalten die Dimension des externen Containers (f). Als nächstes rufen Sie an:

void setSize(Dimension d) 

diese Weise:

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

schließlich diese JPanels zu ihrem Container hinzuzufügen.

+0

Wenn Sie einen Layoutmanager verwenden, sollten Sie nie setSize nennen. Verwenden Sie entweder LayoutManager, Constraints und als letztes Mittel können Sie die pref/min/max-Größe erzwingen oder das absolute Layout ('null'-Layout) verwenden und setBounds/setLocation/setSize selbst aufrufen. Mischen im gleichen Behälter ist nur auf der Suche nach Problemen. –