ボックスレイアウトで最大サイズを設定すると、奇妙なことに気付きました。
ウィンドウの右側にパネルの列が必要で、ボックス レイアウトでセットアップしようとしました。8 ~ 10 個または 30 ~ 40 個ある可能性があるため、30 ~ 40 個を占めるのに十分なスペースを与えますが、8 ~ 10 個しかない場合は、使用可能なすべてのスペースを占めるように広がり、かなり奇妙に見えます。だから私は彼らがそれを起こさないようにMaximumSizeを設定すると思った...
...そして、私はそれらのほとんどが消えてしまいました。
それで、私はそれを色付きのパネルの非常に基本的なスタックに分解し、何が起こっているのかを確認しようとしました。そして、続行する方法を考え出しましたが、私はそれが好きではありません.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BoxLayoutDemo extends JFrame {
public BoxLayoutDemo() {
super("JScrollPane Demonstration");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
setVisible(true);
}
public void init() {
setLayout(null);
JPanel rightPanel = new JPanel();
rightPanel.setBounds(400,0,400,600);
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));
JPanel greenPanel = new JPanel();
JPanel bluePanel = new JPanel();
JPanel yellowPanel = new JPanel();
greenPanel.setBackground(Color.GREEN);
bluePanel.setBackground(Color.BLUE);
yellowPanel.setBackground(Color.YELLOW);
rightPanel.add(greenPanel);
rightPanel.add(bluePanel);
rightPanel.add(yellowPanel);
add(rightPanel);
}
public static void main(String args[]) {
new BoxLayoutDemo();
}
}
...これで期待どおりの結果が得られます。画面の右半分を占める 3 つの色付きのボックスです。
次のようなものを追加すると:
greenPanel.setMaximumSize(new Dimension(400,100));
bluePanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
代わりに、3 つの色付きのボックスの高さはそれぞれわずか 100 ピクセルで、画面の上半分ほどしか占めていません。これも期待どおりです。
でもこれやったら…
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
青いパネルは、他の 2 つのパネルを押しつぶして、わずか数ピクセルの高さにします。
これはおそらく問題にはならないでしょう。すべての最大サイズを設定することはできますが、それが実際には不可能であるという仮説的な状況では、この動作を変更する方法はありますか?しますか?
編集:
では、test1 を次のように呼び出します。
greenPanel.setMinimumSize(new Dimension(400,100));
yellowPanel.setMinimumSize(new Dimension(400,100));
...とにかく、緑と黄色のパネルの高さは約 200 ピクセルなので、これは何にも影響しません。
テスト2:
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
...最初に説明したように、青色のパネルが緑色と黄色のパネルを覆い隠します。
テスト3:
greenPanel.setMinimumSize(new Dimension(400,100));
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMinimumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
...説明したように、実際に実際に起こることはtest2とまったく同じであることを除いて、高さ100ピクセルの緑と黄色のパネルになるはずです。