2011-06-24 13 views
3

jpanelにデータベースから動的にコンポーネントを追加しようとしていますが、フォームの制限を超えて拡張します画面)を水平に表示します。私は、BoxLayoutを持つパネルを使用しています。このPanelLayoutは、内部コンポーネントをx軸に配置します。私がしたいのは、フォームの境界線(またはコンテナパネルの境界線)のx軸上のコンポーネントの追加を制限することです。 コンテナのJPanelの最大サイズ(幅)を設定するにはフォームまたはパネルの枠内でコンポーネントを動的に追加する方法を制限する方法

  • それは 仕事しませんでした:私がこれまで試した何 です。
  • レイアウトマネージャを フローレイアウトに設定するには、x軸に無限に を展開します。
  • スクロールペイン内にコンテナパネルを配置するにはこれは、 の水平スクロールバーを意味します。つまり、 は、フォームの境界である にコンポーネントを限定しません。

カスタムレイアウトを作成する必要がありますか?それより簡単なアイデアはありますか? 私のコードは次のようになります。

jpanelCases.setLayout(new BoxLayout(this.jpanelCases, BoxLayout.X_AXIS)); 
db = Database.getInstance(); 
List<Category> cats = db.getCategories(); 
for(Category c : cats){ 
      JPanel jp = new JPanel(); 
      //addition of other components to the newly created panel here 
      jpanelCases.add(jp); 
} 
+0

私はフレームがレンダリングされる前にすべてが起こっていると仮定していますか?それ以外の場合は、revalidate()を呼び出さずにパネルにコンポーネントを追加すると表示されません。 – mre

+0

はい、レンダリング前にフォームのコンストラクタで一度だけ追加されます。 – vkolias

答えて

0

しかし、それらはフォームの制限(さらには画面さえ)を水平方向に超えています。

ですから、この場合には何をすべきかをしたいですか:場合

a)のフレームだけ Bに追加するコンポーネントを無視していない)は、新しい行に

をコンポーネントを表示します答えは "b"で、試してみるとWrapLayoutです。

+0

私は2番目のケースを望んでおり、WrapLayoutは完璧に動作しています!しかし、多くの内部コンポーネントでは、jscrollpaneが必要です。その場合は、y軸で拡大しますが、これが好ましいと思います。 – vkolias

0

最後で最初のもので2つの接着剤、1を入れて試してみてください。

jpanelCases.setLayout(new BoxLayout(this.jpanelCases, BoxLayout.X_AXIS)); 

jpanelCases.add(Box.createHorizontalGlue()); 

db = Database.getInstance(); 
List<Category> cats = db.getCategories(); 
for(Category c : cats){ 
      JPanel jp = new JPanel(); 
      //addition of other components to the newly created panel here 
      jpanelCases.add(jp); 
} 

jpanelCases.add(Box.createHorizontalGlue()); 
0

何JPanelの上にJScrollPaneを使用してはどうですか?これには、物理​​的な境界を超えないでパネル内の要素が含まれます。それ以外の場合、スクロールのアイデアが気に入らなければ、パネルの物理的な幅に対してパネルに追加された要素の幅の合計を何とかして追跡し、次の要素の幅が合計に加算されたときに要素を追加しないことをお勧めしますパネルの幅を超えています。

こちらがお役に立てば幸いです。

+0

JscrollPaneを使用すると、 x軸のスクロールバーですが、y軸をスクロールするよりもやや簡単です。 – vkolias

関連する問題