2012-02-08 3 views
2

私の質問は私のレイアウト上の部品のサイズをどのように指定できますか?
どうやらpreferedSizeを使わない "部品"のサイズを設定する必要があります。おそらくレイアウトマネージャでは、どこでも安定したサイズが必要です。Javaのレイアウトスイングのサイズを指定する

ゲームのレイアウトを作成したいと思います。私はすでに1つを作成しましたが、私はコンポーネントのサイズに関する問題に取り組んでいます。だから私は自分のレイアウトのより良いコンセプトを作る方が良いと考えました。
私のドラフトを見てみましょう。

 

+-----------+ 
| UPPER  | 
+-----+-----+ 
| A |  | 
+-----+ C | 
| B |  | 
+-----+-----+ 
| Footer | 
+-----------+ 

A+B+C make together Center. 

主要部分、この木のパーツから構成されます。
大文字とメニューがあるでしょう。
センター - これは3部A、Bからなり、C
フッター - 私の考えは、各構成要素のサイズを設定できるようにすることである


ステータスバーが存在するであろう。 レイアウトはすべてパーツCに依存し、サイズは450x450 pxまたは600x600 pxになる可能性があります。
パートAとBについては、テキスト情報のみが存在するため、幅のみを指定する必要があります。約300ピクセルです。
センター部分にGridBagLayoutを使用しようとしましたが、C用のsetSizeはうまく機能しませんでした。
私はコンテナ(java.awt.Container)内のパーツを作成します - それらの中に各パーツの内容を追加して、コンテナを上位レベルに追加します。

+1

のデフォルト優先サイズを上書きすることができます。コンポーネントは、getPreferredSize()が呼び出されるときに望ましいサイズを認識し、それを返す必要があります。ほとんどのレイアウトでは、適切なサイズのコンポーネントを使用してレイアウトします。 –

+0

私はそれがレイアウトマネージャーの仕事であることを知りました...私はcomponetのprefferedサイズを設定したくありません。レイアウトマネージャ(マネージャ)のコンポーネントのサイズを厳密に設定できますか? – user1097772

+0

レイアウトマネージャを完全に使用しないようにし、* all *を手動で行わない限り、コントロールのサイズを手動で設定することはできません。私は中道はないと思う。 –

答えて

-2

私の答えが何らかの形であなたを助けてくれることを願っています。 - アッパーパネルは北 に行く - フッターパネルは南 に行く - パネル(すでにある)のcontentPane のためのBorderLayoutを使用します。JPanelのか、JFrameのサイズを設定した経験から、私はいつもsetPreferredSize(new Dimension(WIDTH,HEIGHT));

+2

-1 nullレイアウトを提案するため。 – mre

+0

私は間違っている、nullのレイアウトを使用して悪い習慣ではありません。しかし、最終的な手段として、あなたが最適なレイアウトマネージャを使用することを決定するのに問題があるとき、確かに最後の手段として、それらのどれもあなたがしたいことをやっていないようです? – AWb

+2

ヌルレイアウトは決して答えません。 – mre

2

最も簡単な方法を使用していましたBはGridLayout(2,1)でパネルabに入ります。 - Panel abとCがGridLayout(1,2)でパネルabcに入ります。 - Panel abcがセンターに入ります。 あなたのA、BのsetPrefferedSize 、C

+0

Sryが、これは私の質問に答えていない...どのように部品のサイズを設定することができます。 – user1097772

+0

論理的なサイズのGUIを作成するには、 'C'コンポーネントの望ましいサイズを設定するだけで十分です(xyzの全体的な戦略に加えて)。あなたが「それを詰めたい」場合は、必要に応じて罫線を追加してください。私は基本的にはxyzによって概説された式を基本的に辿ってGUIを作ろうとしていましたが、a)すでに言われていたのを見ました。そしてb)あなたはそれが必要ではないと主張しました! –

+0

これは、abのサイズ(resp width、heigntも同じですが、問題ではない)が 'C 'のサイズと同じになるためです。 (あまりにもうまく動作していないのに、あまりにも大きなサイズを設定しています)。 – user1097772

2

一般に、GridBagLayoutは、setSizeでコントロールに設定した値を無視しますが、代わりに好ましいサイズ(getPreferredSizeと呼ぶ)を使用して、それを全体のレイアウトを計算するために使用する。その好みのサイズを自分で設定することはお勧めできません。ほとんどのコントロールはレイアウトがトリガーされるたびにそれらの値を再計算する傾向があるため、スティックにするのは難しいでしょう。

あなたが本当にUIエレメントCは、一定の大きさを持っていることを確認したい場合は、カスタム(例えば、JPanelの)の適切な塩基から派生するクラスとオーバーライドそれはサイズを返すようにするgetPreferredSize方法として、それを実装UIのその部分の必要性/必要性

編集:ここで別のUI要素を含むことができ、レイアウトマネージャによって尊重されるべきである(変更されているsetSize方法を使用して)固定サイズに設定することができるラッパーの少しの例は次のとおり

import java.awt.BorderLayout; 
import java.awt.Dimension; 

import javax.swing.JComponent; 
import javax.swing.JPanel; 

public class FixedSizeComponent extends JPanel { 
    private Dimension size; 
    private final JComponent content; 

    public FixedSizeComponent(JComponent content) { 
     super(new BorderLayout()); 
     this.content = content; 
     super.add(content, BorderLayout.CENTER); 
    } 

    @Override 
    public void setSize(Dimension d) { 
     size = d; 
    } 

    @Override 
    public void setSize(int width, int height) { 
     size = new Dimension(width, height); 
    } 

    @Override 
    public Dimension getSize() { 
     if (size != null) return size; 
     return content.getSize(); 
    } 

    @Override 
    public Dimension getSize(Dimension rv) { 
     if (size != null) { 
      if (rv == null) rv = new Dimension(); 
      rv.height = size.height; 
      rv.width = size.width; 
      return rv; 
     } 
     return content.getSize(rv); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (size != null) return size; 
     return content.getPreferredSize(); 
    } 

    @Override 
    public Dimension getMaximumSize() { 
     if (size != null) return size; 
     return content.getMaximumSize(); 
    } 

    @Override 
    public Dimension getMinimumSize() { 
     if (size != null) return size; 
     return content.getMinimumSize(); 
    } 
} 
+0

ああ、本当に、確かに、getMaximumSizeメソッドとgetMinimumSizeメソッドを上書きする方が良いでしょう。 –

+0

* "本当にUIエレメントCに一定のサイズがあることを確認したい場合は.. * getPreferredSizeをオーバーライドする*一部のレイアウトマネージャは優先サイズを尊重しません。そして、私は 'setPreferredSize()'を単にコンストラクタから呼び出すことができ、それを開発者に任せて* default * preferred sizeが必要なサイズかどうかを選択できるという利点を理解したことがありません。 –

+0

私の経験では、現在のレイアウトを無効にするたびにコントロールのサイズが再計算される傾向があるため、UIの構築中に一度だけ設定した場合、再計算によって手動で設定された優先サイズが上書きされ、配置されたレイアウトは壊れています。 –

1

私は同様の問題を抱えていました。下のステータスツールバーには他の多くのコンポーネントが含まれていました。私の問題は、それが高くなるということでした。だから、私がやったことは、最大の高さを最小の高さに設定する最大サイズを上書きすることでした。

JPanel status = new JPanel(new SpringLayout()) { 
    @Override 
    public Dimension getMaximumSize() { 
    Dimension max = super.getMaximumSize(); 
    Dimension min = getMinimumSize(); 
    return new Dimension(max.width, min.height); 
    } 
}; 
0

この答えは、

WAY遅すぎる少なすぎるとです(多分、このメソッドは、この質問を尋ねる時には存在しなかった)

だけgetPreferredSizeのように、setPreferredSizeもありますメソッドはDimensionオブジェクトをとります。

デフォルトでは、レイアウトではコンポーネントサイズ(setSizeを使用して設定されている可能性があります)は無視され、代わりに推奨サイズが使用されます。

setPreferredSizeを使用することにより、あなたはあなたがコンポーネントのサイズを設定しないでくださいコンポーネント

関連する問題