5

FlowLayout を使用する JPanel があります。JPanel にいくつかの JLabel を追加し、setPreferedSize() を使用してサイズを調整し、リスト label_list に保存します。すべて正常に動作します。次に、サイズを変更します。

for(JLabel c:label_list){
c.setPreferedSize(new Dimension(10,10));
}

そして、それは機能しません。

c.setBackground(Color.red)

および同様のものが機能します。ここで setPreferedSize を使用できないのはなぜですか?

c.setBounds(1,1,10,10) および c.setSize(10,10) は機能しますが、UI を更新 (パネルのサイズを変更) すると、すべてのサイズが通常に戻ります。

4

1 に答える 1

5

次に、サイズを変更します。

for(JLabel c:label_list){ c.setPreferedSize(新しいディメンション(10,10)); }

そして、それは機能しません。

ラベルの親を呼び出しrevalidate()て、レイアウトを再実行し、優先サイズを強制する必要があります。

c.setBounds(1,1,10,10) および c.setSize(10,10) は機能しますが、UI を更新 (パネルのサイズを変更) すると、すべてのサイズが通常に戻ります。

境界/サイズ/場所を手動で設定すると、親コンテナーの LayoutManager と競合します。LayoutManager の役割は、子コンポーネントを配置してサイズを設定することです。

レイアウトをnullsetSize-setLocation/setBounds に設定して呼び出すか、または LayoutManager (推奨) を使用して setSize-setLocation/setBounds を呼び出さないでください。せいぜい setPreferred/setMaximum/setMinimum size を呼び出すことができますが、クロス L&F 問題が発生する可能性があるため、これを避けるようにしてください。

于 2012-07-10T10:18:22.473 に答える