2017-02-10 8 views
0

私はBoxLayout Y軸を持つJPanelを持っており、このPanelに複数のJLabelを追加したいと考えています。ラベルはパネルの幅に合わせる必要がありますが、必要な高さだけを使用してください。あなたの誰かが私を助けることができますか?フィット両親がBoxLayoutを使用して幅コンポーネントを作成する方法BoxLayoutを使用してコンポーネントの親の幅に合わせる方法は?

+1

は 'BoxLayout'は、部品の' preferredSize'を尊重し、あなたは、例えば代わり​​にGridLayout' 'のように別のレイアウトを使用するか、' FlowLayout'中にあなた 'BoxLayout'の各ラインをラップする必要があります。しかし、もっと早い時期により良い助けを得るには、あなたの実際の出力と希望する出力の画像やアスキーアートを、最小限のサイズで、余分なスペースでリサイズすることができるように、[mcve]と投稿してください。 – Frakcool

+0

ありがとうございました。これは、私がGridLayoutを使うときのように見えます:http://prntscr.com/e74ftl、ユーザがそれを使用しているときのラベルの数がわからないからです。そして、これはBoxLayout:http://prntscr.com/e74gr0で見ていますが、ラベルをパネルにして、文字列を表示するのに必要なだけの大きさではないようにします。 –

+2

@Frakcool、 'デフォルトでBoxLayoutはコンポーネントのpreferredSizeを基準にしています。' - 実際はこの場合、BoxLayoutはコンポーネントの最大サイズを考慮します。通常、BoxLayoutは余分なスペースがあるとコンポーネントが大きくなるようにします。ただし、JLabelの優先サイズと最大サイズは同じであるため、ラベルは利用可能な領域を埋めることがありません。 – camickr

答えて

3

BoxLayoutは、コンポーネントのサイズのmaximum sizeを表します。 JLabelの場合、ラベルのサイズが大きくならないように、優先サイズと最大サイズは同じです。

return new Dimension(getPreferredSize().width, Integer.MAX_VALUE); 

しかしより簡単なアプローチは、あなたが必要な効果をIV​​Eにパネルをnstingすることです:

だからあなたのような何かをする各JLabelののgetMaximumSize()メソッドをオーバーライドすることができます。例えば

JPanel labelPanel = new JPanel(new GridLayout(0, 1)); 
labelPanel.add(new JLabel("one")); 
labelPanel.add(new JLabel("two")); 

JPanel wrapper = new JPanel(new BorderLayout()); 
wrapper.add(labelPanel, BorderLayout.PAGE_START); 

frame.add(wrapper, BorderLayout.CENTER); 

今labelPanelは必要なだけの高さになりますが、幅は、フレームの幅と幅も大きくなりますので、ラベルを埋めるために成長します。ネストされたパネルを使用せずに

別のオプションは、GridBagLayoutを使用することです。これは、利用可能なスペースを埋めるために各コンポーネントのサイズを変更できるようにするfill制約をサポートしています。

詳細についてはLayout Managers上のSwingのチュートリアルからのセクションをお読みください。デフォルトでは

+0

非常にありがとう!これは私を助けた。以前はコンポーネントのminimumSizeとmaximumSizeを使用していました。 –

関連する問題