12

私はJava Swingが初めてで、GridBagLayoutを左上隅から開始するのに苦労しているため、 c.gridx=0 c.gridy=0 はオブジェクトを左上隅に配置します。

この時点で何をする必要があるかを教えていただければ幸いです。

    JPanel panel = new JPanel(new GridBagLayout());
    frame.add(panel);
    GridBagConstraints c = new GridBagConstraints();

NORTHWEST または FIRST_LINE_START 定数を使用する必要があることはわかっていますが、その方法がわかりません。このようにしようとしましたが、定数が認識されませんでした。

    frame.getContentPane().add(panel, BorderLayout.NORTHWEST);

ご協力いただきありがとうございます。

4

6 に答える 6

16

GridBagLayout の使用方法に関する Swing チュートリアルのセクションを読んでください。「weightx、weighty」のセクションには次のように記載されています。

weightx または weighty にゼロ以外の値を少なくとも 1 つ指定しない限り、すべてのコンポーネントがコンテナーの中央に集まります。

于 2011-06-16T03:32:38.557 に答える
14

GridBagConstraints'anchorプロパティを使用する必要があります。これでうまくいくはずです:

frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
frame.add(panel, gbc);

必要なレイアウトを取得するために、制約オブジェクトの他のプロパティを設定する必要がないことを保証するものではありません。特に、パネルに与えられた使用可能なすべてのスペースをパネルが占有するようにweightx設定する必要がある場合があります。weighty1

于 2011-06-15T21:04:58.523 に答える
5

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);
于 2012-07-21T13:23:25.210 に答える
4

回避策があります。BorderLayout.NORTH を使用して、GridBagLayout パネルを 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);
}

ここに画像の説明を入力

于 2016-11-13T05:24:39.247 に答える