0

GridBagLayouts で問題が発生しています。

下の図に示すように、いくつかのコンポーネントを配置しています。

ここに画像の説明を入力

「上」コンポーネントが十分に小さく縮小した場合、「中央」コンポーネントを「右上」の下端の上に移動できるようにします。ただし、これを行うにはグリッド内の別の行に配置する必要があるため、明らかに問題が発生します。

これを解決するために、右側の列全体を独自のコンテナーとして定義し、独自のレイアウト マネージャーを使用します。2 つの列が独立して動作できることを期待していますが、同じ問題が発生します。2 つのレイアウト マネージャーがまだどのように相互作用している可能性があるかはわかりません。誰でも私の問題が何であるかを説明できますか?

関連するコードは次のとおりです(私のクラスではアプレットを拡張しています):

public void init(){
    addComponents();
}

private void addComponents(){
    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    Left left = new Left();
    Top top = new Top();
    Center center = new Center();
    TopRight topRight = new TopRight();
    BottomRight bottomRight = new BottomRight();
    Bottom bottom = new Bottom();

    topRight.setPreferredSize(new Dimension(200,200));
    top.setPreferredSize(new Dimension(0,200));
    center.setPreferredSize(new Dimension(0,100));
    container.setPreferredSize(new Dimension(200,200));

    c.fill = GridBagConstraints.BOTH;

    c.gridx = 0; c.gridy = 0;
    c.gridwidth = 1; c.gridheight = 3;
    c.weightx = 0.2; c.weighty = 1.0;
    this.add(left,c);

    c.gridx = 1; c.gridy = 0;
    c.gridwidth = 1; c.gridheight = 1;
    c.weightx = 0.8; c.weighty = 0.8;
    this.add(top,c);

    c.gridx = 1; c.gridy = 1;
    c.gridwidth = 1; c.gridheight = 1;
    c.weightx = 0.8; c.weighty = 0.0;
    this.add(center,c);

    c.gridx = 1; c.gridy = 2;
    c.gridwidth = 1; c.gridheight = 1;
    c.weightx = 0.8; c.weighty = 0.2;
    this.add(bottom,c);

    JPanel container = new JPanel();
    container.setLayout(new GridBagLayout());

    c.gridx = 2; c.gridy = 0;
    c.gridwidth = 1; c.gridheight = 3;
    c.weightx = 0.0; c.weighty = 1.0;
    this.add(container,c);

    GridBagConstraints c2 = new GridBagConstraints();
    c2.fill = GridBagConstraints.BOTH;

    c2.gridx = 0; c2.gridy = 0;
    c2.gridwidth = 1; c2.gridheight = 1;
    c2.weightx = 0.0; c2.weighty = 0.0;
    container.add(topRight,c2);

    c2.gridx = 0; c2.gridy = 1;
    c2.gridwidth = 1; c2.gridheight = 1;
    c2.weightx = 0.0; c2.weighty = 1.0;
    container.add(bottomRight,c2);
}

注: 表示されている各コンポーネント (左、上など) は JPanel の拡張です。それぞれの paint(Graphics g) メソッドがオーバーライドされて、色で塗りつぶされています。

よろしくお願いします。長々と読んで申し訳ありません。

ジョナサン

4

1 に答える 1

0

問題を修正しました。これは、Top コンポーネントの推奨高さを不必要に設定したことと関係がありました。その行を削除すると、必要なように機能しました。

于 2012-11-06T04:16:12.547 に答える