2012-01-05 7 views
2

レイアウトを作成したい:2行1列。第1行はウィンドウの70%の高さを占め、第2行はウィンドウの30%を占める。私はweighty属性をGridBagConstraintsとすることでこれを達成しています。1列のレイアウトでウィンドウの全幅を使用しない

しかし、アプリケーションウィンドウのサイズを変更するとコンポーネントが中央に残り、幅が一定でコンポーネントの左右に空白が表示されるため、コンポーネントの幅に問題があります(たとえfillBOTH)。この問題は、ウィンドウの高さを変更すると発生しません(コンポーネントのサイズが非常によくなり、ウィンドウの高さ全体を塗りつぶします)。私の制約の下

firstConstraints.gridx = 0; 
firstConstraints.gridy = 0; 
firstConstraints.weighty = 0.7; 
firstConstraints.fill = GridBagConstraints.BOTH; 

secondConstraints.gridx = 0; 
secondConstraints.gridy = 1; 
secondConstraints.weighty = 0.3; 
secondConstraints.fill = GridBagConstraints.BOTH; 
+0

あなたが設定し、アンカー制約試してみましたか? –

答えて

5

私はあなたにも必要だと思う:

gbc.weightx = 1.0; 

はweightxに、重い制約について語っHow to Use a GrigBagLayout上のSwingのチュートリアルからsectonを参照してください。

+1

これは完璧に動作します、ありがとうございます。体重には適切なデフォルト値があると思いましたが、間違った前提でした。 –

1

簡単な例

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class BorderPanels extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public BorderPanels() { 
     getContentPane().setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     JPanel panel1 = new JPanel(); 
     Border eBorder = BorderFactory.createEtchedBorder(); 
     panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "70pct")); 
     gbc.gridx = gbc.gridy = 0; 
     gbc.gridwidth = gbc.gridheight = 1; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.anchor = GridBagConstraints.NORTHWEST; 
     gbc.weightx = gbc.weighty = 70; 
     getContentPane().add(panel1, gbc); 
     JPanel panel2 = new JPanel(); 
     panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "30pct")); 
     gbc.gridy = 1; 
     gbc.weightx = 30; 
     gbc.weighty = 30; 
     gbc.insets = new Insets(2, 2, 2, 2); 
     getContentPane().add(panel2, gbc); 
     pack(); 
    } 

    public static void main(String[] args) { 
     new BorderPanels().setVisible(true); 
    } 
} 
+0

いい答えですが、私は@camickrが正確な問題を釘付けにしたと思います... –

関連する問題