2012-04-21 9 views
1

すべてが中心に向かって盛り上がっているようですが、なぜそれが分かりませんか。ここに私のコードです。私はできるだけ読みやすいようにしました。Java GridBagLayoutレイアウトの問題

import java.awt.Component; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JTextField; 

/** 
* 
* @author rubixibuc 
*/ 
public class RulesWindow extends JFrame { 

    public GridBagLayout layout = new GridBagLayout(); 
    public GridBagConstraints constr = new GridBagConstraints(); 
    public DefaultComboBoxModel modelE = new DefaultComboBoxModel(); 
    public DefaultComboBoxModel modelA = new DefaultComboBoxModel(); 
    public DefaultListModel modelL = new DefaultListModel(); 

    public RulesWindow() 
    { 
     super("Rules Window"); 
     /* layout for window 
     |_P_|__E__|_T_|__A__|_a_| 
     |     |xxx| 
     |     |xxx| 
     |     |xxx| 
     |_________L_________|_M_| 
     X = no fill 
     P = pattern field 
     E = extension combobox 
     T = target action 
     A = action combobox 
     a = add rule 
     M = remove rule 
     L = rule list 
     */ 

     setLayout(layout); 

     JTextField P = new JTextField(); // 0,0,1,1 
     JComboBox E = new JComboBox(modelE); // 1,0,2,1 
     JTextField T = new JTextField(); // 3,0,1,1 
     JComboBox A = new JComboBox(modelA); // 4,0,2,1 
     JButton a = new JButton("+"); // 6,0,1,1 
     JList L = new JList(modelL); // 1,1,6,4 
     JButton M = new JButton("-"); // 6,4,1,1 

     changeConstraints(0,0,1,1); 
     add(P); 
     changeConstraints(1,0,2,1); 
     add(E); 
     changeConstraints(3,0,1,1); 
     add(T); 
     changeConstraints(4,0,2,1); 
     add(A); 
     changeConstraints(6,0,1,1); 
     add(a); 
     changeConstraints(1,1,6,4); 
     add(L); 
     changeConstraints(6,4,1,1); 
     add(M); 

     setSize(200,200); 
     setVisible(true); 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
    } 
    public final void changeConstraints(int gridx, int gridy, int gridwidth, int gridheight) 
    { 
     constr.anchor = GridBagConstraints.NORTHEAST; 
     constr.fill = GridBagConstraints.BOTH; 
     constr.gridx = gridx; 
     constr.gridy = gridy; 
     constr.gridwidth = gridwidth; 
     constr.gridheight = gridheight; 
    } 
    @Override 
    public final Component add(Component comp) 
    { 
     layout.setConstraints(comp, constr); 
     super.add(comp); 
     return comp; 
    } 
} 

ありがとうございます。私はそれがコメントのように見えるべきものを図解しました。

また、オーバーライドされたメソッドを正しく呼び出す方法はありますか?

+0

最後に2つの方法を変更して、後で問題が発生することを認識しました – rubixibuc

答えて

2

weightxにと重い制約がどこにあるか、私はここに

それはすべてが中心に向かってつぶしているようだが、私はGridBagLayoutのに伴って、なぜ

を把握することはできませんたびに、私は尋ねます?

可能なクイックソリューション:GridBagConstraintsのweightxフィールドとweightyフィールドを妥当な値に設定してください(デフォルトで1.0に設定して開始してから再生してください)。

+0

私はそれを必要としないと仮定したので、アンカーはデバッグのために左上にありますが、 – rubixibuc

+0

私はデフォルト値が良いと思った – rubixibuc

+0

@rubixibuc:オンラインで入手できるチュートリアルを読んだことがありますか?彼らは非常に有用で、0.0のデフォルトがうまくいかない理由を教えてくれます。 –