2012-01-15 13 views
1

2つのパネルがフレームの40%と60%になるようにGridBagLayoutを取得しようとしていますが、内部にコンポーネントを持つことができ、面倒です。コンポーネントが内部にあるJava GridBagLayout

私はパネル内にボタンを置かないと、それは私が欲しいのと同じように動作します。

私が間違っていることはよくわからず、ボタンの作成をGridBagLayoutのパネルが作成された場所に移動しようとしましたが、それでも動作しませんでした。ここ

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

public class Test{ 

public void display(){ 
    JFrame frame = new JFrame(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(900,650); 
    frame.setVisible(true); 

    JPanel test = new JPanel(); 
    test.setLayout(new GridBagLayout()); 
    GridBagConstraints c= new GridBagConstraints(); 

    JPanel left= new JPanel(); 
    JPanel right= new JPanel(); 

    c.fill = GridBagConstraints.VERTICAL - GridBagConstraints.HORIZONTAL; 
    c.weightx = 0.4; 
    c.gridx = 1; 
    c.weighty = 1; 
    test.add(left,c); 
    c.weightx = .6; 
    c.gridx = 2; 
    test.add(right,c); 

    JButton button= new JButton("A button"); 
    left.add(button,c);//If I do not add this, then it shows how I want it to be 

    frame.add(test); 
    } 
} 
+0

'createVector'とは何ですか? –

+0

申し訳ありませんが、ボタンに名前を変更しました。 – user1062898

+0

私はそれを実行すると、ボタンの有無にかかわらず、40/60%の分割を持つ2つのパネルのように見えます。それはまさにそれが問題なのですか? – Ash

答えて

1

重みを持つ事は、彼らが何を記述するということです余分なスペースとは関係ありません。コンポーネントはレイアウトマネージャがレイアウトを計算する際に使用する優先、最小、最大の寸法を持ちます。 GridBagLayoutは、これらの重みを使用して余分なスペースを分割します。あなたの場合、私は分割されたスペースが900-button.getPreferredSize()。widthと等しいと思います。おそらく800ピクセルを320と480に分割しています。

0

はGridBagLayoutがで作成され、パネルの例である:(だけではなく、コンポーネントを作成し、スイングの工場については気にしないでください)

private void buildSourcePanel() { 

    JPanel pnlSource = new JPanel(); 

    GridBagLayout gbl_pnlSource = new GridBagLayout(); 
    gbl_pnlSource.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0}; 
    gbl_pnlSource.columnWidths = new int[]{0, 0, 100, 100, 25}; 
    pnlSource.setLayout(gbl_pnlSource); 

    final JLabel lblFolderMask = swingFactory.createLabel(" SOURCE DIRECTORY ", null, null, SwingConstants.LEFT, SwingConstants.CENTER, true); 
    pnlSource.add(lblFolderMask, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(5, 5, 5, 0), 0, 0)); 

    txtSource = swingFactory.createTextField(null, "txtSource", null, SystemColor.textHighlight, SwingConstants.LEFT, false, true, "Source Directory"); 
    pnlSource.add(txtSource, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, 10, 1, new Insets(5, 0, 5, 5), 0, 0)); 

    final JButton btnBrowse = new JButton("Browse..."); 
    btnBrowse.setBorder(new CompoundBorder(new LineBorder(new Color(0, 0, 0), 0, false), new EmptyBorder(5, 5, 5, 5))); 
    btnBrowse.setFont(new Font("Verdana", Font.BOLD, 14)); 
    pnlSource.add(btnBrowse, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(5, 0, 5, 5), 0, 0)); 

    final JButton btnClear = new JButton("Clear..."); 
    btnClear.setBorder(new CompoundBorder(new LineBorder(new Color(0, 0, 0), 0, false), new EmptyBorder(5, 5, 5, 5))); 
    btnClear.setFont(new Font("Verdana", Font.BOLD, 14)); 
    pnlSource.add(btnClear, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(5, 0, 5, 5), 0, 0)); 

    lblStatus = swingFactory.createLabel(null, null, null, SwingConstants.CENTER, SwingConstants.CENTER, false); 
    pnlSource.add(lblStatus, new GridBagConstraints(4, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(5, 5, 5, 5), 0, 0)); 
} 
関連する問題