3

私はGridBagLayout(現在)2行を表示するためにを使用しています。私はこのレイアウトがこのタスクにはやり過ぎであることを認識していますが、それを使用する方法を学ぼうとしています。問題は、2つのパネルを2つの別々の行に追加し、コンテンツの周囲に大きなギャップがあることです(以下の画像とコードを参照): alt text http://www.imagechicken.com/uploads/1264533379009864500.png

Image background;
    public Table(){
        super();
        ImageIcon ii = new ImageIcon(this.getClass().getResource("pokerTableV2.png"));
        background = ii.getImage();
        setSize(Constants.FRAME_WIDTH, Constants.TABLE_HEIGHT);

        setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.fill = GridBagConstraints.HORIZONTAL;

        JButton button = new JButton("hello world");
        JPanel panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(800,100));
        panel1.add(button, BorderLayout.CENTER);
        panel1.setBackground(Color.yellow);
        add(panel1, constraints);

        constraints.gridx = 0;
        constraints.gridy = 1;

        JPanel middlePanel = new JPanel();
        middlePanel.setPreferredSize(new Dimension(800,350));
        middlePanel.add(button, BorderLayout.CENTER);
        middlePanel.setBackground(Color.blue);
        add(middlePanel, constraints);


    }
4

2 に答える 2

8

使用する

constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;

weightx/のJavaDocweighty言う:

余分な水平/垂直スペースを分散する方法を指定します。

JavaDoc for fill

このフィールドは、コンポーネントの表示領域がコンポーネントの要求されたサイズよりも大きい場合に使用されます。コンポーネントのサイズを変更するかどうか、サイズを変更する場合はその方法を決定します。

于 2010-01-26T18:59:44.637 に答える
4

残念ながら、を使用するとGridBagLayout、コンテンツがコンテナ全体に表示されない場合、すべてのコンテンツがコンテナ内の中央に自動的に配置されます。そのため、非常に大きなギャップが生じています。

これを修正するには、基本的に2つの方法があります。

  1. 難しい方法:をいじるGridBagConstraints。中心化の振る舞いを避けようとしたとき、私はこれで限られた成功しか収めませんでした。
  2. 簡単な方法:のGridBagLayout内側を配置し、左上または任意FlowLayoutの位置に配置を設定します。FlowLayout

私は先週、この質問に自分で質問し、答えました。

したがって、あなたの場合、あなたはあなたpanel1middlePanel直接JFrame(?)に追加しています。GridBagLayout

JFrame (GridBagLayout)
 - panel1
 - middlePanel

代わりに、この代替構造を提案して、余分なスペースをすべて取り除きます(必要に応じて、中央の配置も同様に)。

JFrame (FlowLayout)
 - JPanel (GridBagLayout)
   - panel1
   - middlePanel

HTH

于 2010-01-27T00:03:09.400 に答える