私が直面している問題が自分の状況に限定されているかどうかはわかりませんでしたので、問題の原因となっているものを取り除きました(サンプルコンポーネントとしてJLabel
)。JScrollPaneの高さを固定
public class InterestingBehavior {
static int direction = -4;
static final boolean useScroll = true;
static final String longString = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
public static void main(String[] args) {
JFrame test = new JFrame("Test");
test.setSize(500, 300);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setLayout(new BoxLayout(test.getContentPane(), BoxLayout.Y_AXIS));
for (int i = 0; i < 10; i++)
test.add(useScroll ? new JScrollPane(new JLabel(longString)) : new JLabel(longString));
test.add(Box.createVerticalGlue()); //should use all available space
final int min = 300, max = 600;
new Timer(50, e -> {
int h = test.getHeight();
SwingUtilities.invokeLater(() -> test.setSize(test.getWidth(), h + direction));
direction = h == min || h == max ? -direction : direction;
}).start();
test.setVisible(true);
}
}
フレームが自分自身のサイズを変更して、欲しい/したくないものを表示します。 JLabel
をBoxLayout
に追加すると、それらはすべてJFrame
の上部に残ります。これは、パネルに垂直の接着剤を追加したためです。しかしJLabel
をJScrollPane
にラップすると、JFrame
の高さに基づいて自動的にサイズが自動的に変更されることになります。この現象を回避し、スクロールペインを一定の高さに保つにはどうすればよいですか?
フレーム:
リサイズは、私が欲しいものではありませんどの
になります。
どのようにして1次元を子コンポーネント(ビューポート)の寸法に正確に固定できますか?