3

GridBagLayoutを使用してアドレスブックGUIをコーディングしていました。問題は、gridxとgridyを設定しても機能しないため、レイアウトが使用されておらず、コンポーネントがフレームの中央にあるように見えることです。何が起こっているのかを確認するために、コード全体を1の小さなコードだけで貼り付けているわけではありませんJButton 。コードを確認し、修正方法を教えてください。現在、ボタンが中央に表示されています。 JFrame

私は初心者なので、愚かなスタイルのコードやそのような問題があれば気にしないでください

public class rect  
{
 JFrame frame ; 
 JPanel panel1 ; 
 JButton b1;
 GridBagConstraints gbc; 

 public  rect()
{
    panel1 = new JPanel();  
    panel1.setSize(300,300);
    panel1.setLayout(new GridBagLayout());
    gbc = new GridBagConstraints();

    frame= new JFrame("Address ?ooK "); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);


    b1= new JButton () ;
    b1.setText("Hello ");
    gbc.gridx=1; 
    gbc.gridy=0; 

    panel1.add(b1, gbc) ; 

    frame.add(panel1);
    panel1.setVisible(true);
    frame.setVisible(true);

}
4

3 に答える 3

1

設定時

gbc.gridx = 1;
gbc.gridy = 0;

の場合、絶対測位GridBagConstraintsを使用する場合のように絶対座標を設定していません。代わりに、コンポーネントが存在するグリッドセルを設定します。上記のこのサンプルアプリケーションでは、コンポーネントが1つしかないため、グリッドセルが1つしかないため、デフォルトで中央に配置されます。JButton

この事実を強調するために、アンカーをNORTH追加して別のボタンを追加し、2つのグリッドセルを作成します。

gbc.anchor = GridBagConstraints.NORTH;
gbc.weightx = 1.0;
gbc.weighty = 1.0;

gbc.gridx = 1;
gbc.gridy = 0;

panel1.add(new JButton("Hello"), gbc);

gbc.gridx = 2; // now a 2nd cell exists
panel1.add(new JButton("Test"), gbc);

また、ボタンが:の上部に配置されるように設定weightxしていることに注意してください。weightyJFrame

2つのNORTHアンカーコンポーネントを備えたGridBagLayout

于 2012-11-30T18:36:45.923 に答える
0

最終目標が何であるかから欠落しているいくつかの詳細がありますが、:

フレームにはレイアウトマネージャーがないため、JPanelはフレームの中央に配置されます。パネルに追加するコンテンツ(JButtonなど)は、GridBagLayoutに従ってレイアウトされます(ただし、フレームにはレイアウトマネージャーがないため、フレームはペインの配置方法を認識しません)。フレームをコンテナと考え、ペインを別のコンテナと考えてください。

ペインに設定したのと同じように、フレームにGridBagLayoutを設定します。


また、フレームとパネルはまったく同じサイズに設定されています-

panel1.setSize(300,300);
...
frame.setSize(300, 300);

panel1フレームのレイアウトマネージャーに応じて、の位置の変化の影響を実際に確認するには、フレームを大きくしたいと思うかもしれません。

于 2012-11-30T17:42:30.377 に答える
0

BorderLayoutなどの別のレイアウトを使用することをお勧めします。たとえば、次のことができます

panel1 = new JPanel();  
panel1.setSize(300,300);
panel1.setLayout(new BorderLayout());

frame= new JFrame("Address ?ooK "); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
b1= new JButton ("Hello") ;

panel1.add(gbc) ; 

frame.add(panel1,BorderLayout.CENTER));
frame.add(b1,BorderLayout.PAGE_END));
panel1.setVisible(true);
frame.setVisible(true);
于 2012-11-30T18:05:20.810 に答える