私はJava Swingを初めて使用し、c.gridx = 0 c.gridy = 0がオブジェクトを左上隅に配置するように、左上隅からGridBagLayoutを開始するのに苦労しています。 。
この時点以降に私が何をする必要があるかを教えていただければ幸いです。
JPanel panel = new JPanel(new GridBagLayout());
frame.add(panel);
GridBagConstraints c = new GridBagConstraints();
NORTHWESTまたはFIRST_LINE_START定数を使用する必要があることは知っていますが、その方法がわかりません。私はそれをこのようにしようとしました」が、それは定数を実現しませんでした。
frame.getContentPane().add(panel, BorderLayout.NORTHWEST);
ご協力いただきありがとうございます。
GridBagConstraints
'anchor
プロパティを使用する必要があります。これはあなたのためにそれをするはずです:
frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
frame.add(panel, gbc);
希望するレイアウトを取得するために、制約オブジェクトの他のプロパティを設定する必要がないことを保証するものではありません。特に、widthx
とwidthy
を1
に設定して、パネルが指定された使用可能なスペースをすべて占有するようにする必要がある場合があります。
GridBagLayoutの使用方法 に関するSwingチュートリアルのセクションをお読みください。 「weightx、weighty」のセクションは次のように述べています。
weightxまたはweightyにゼロ以外の値を少なくとも1つ指定しない限り、すべてのコンポーネントがコンテナーの中央に集まります。
IDE(NetBeansなど)を使用する人のために、私はついに素晴らしいトリックを見つけました:コンポーネントを一番上に追加し、それらの好みのサイズを使用したい場合:weighty = 1.0の別の空のパネルを追加します。コピー自動生成されたコード(NetBeans)から:
gridBagConstraints = new Java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.weighty = 1.0;
jPanelOptions.add(jPanelFiller, gridBagConstraints);
すばやく簡単な方法:
ページの終わりに空白のJLabelを追加します。
// your code goes here
gbc.weightx = 1;
gbc.weighty = 1;
bg.add(new JLabel(" "), gbc); // blank JLabel
回避策があります。 GridBagLayoutパネルは、BorderLayout.NORTHを使用してBorderLayoutパネルに配置できます。次に、GridBagLayoutパネルのコンポーネントが上の位置から開始されます。
static void test4(){
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(480, 360);
JPanel borderLayoutPanel=new JPanel(new BorderLayout());
JPanel gridBagLayoutPanel = new JPanel(new GridBagLayout());
borderLayoutPanel.add(gridBagLayoutPanel, BorderLayout.NORTH);
frame.add(borderLayoutPanel);
JButton testButton=new JButton("test button");
GridBagConstraints c = new GridBagConstraints();
c.gridx=0;
c.gridy=0;
gridBagLayoutPanel.add(testButton, c);
frame.setVisible(true);
}
グリッドを一番上まで移動させたい場合は、最後の項目まですべての重みを0に設定し、0より大きい任意の数値に設定すると、残りのボタンが効果的に一番上に押し出されます。
ボタンのグリッド値もインクリメントすることを忘れないでください。
それ以外の場合は中央に配置されます。 (c.fill = GridBagConstraints.HORIZONTALプロパティを使用していない場合は、gridxとweightxの値を使用して同じことができます。)