私がやろうとしていること
Swingでは、または同等の線形コンテナーを使用しようとしてBoxLayout
いますが、コンテナー内のアイテムが垂直方向に伸びています。私のアプリケーションの内部では、それらを垂直方向に伸ばしたくありません。
コンポーネントにpreferredSizeまたはmaximumSizeを設定できることは知っていますが、次のコードは単なる再現であり、実際にはより複雑で動的なコンポーネントのサイズをハードコーディングまたは最大化することはできません。そしてBorderLayout
、そのBorderLayout.TOP
位置でaを使用することはできません。これを行うと、スクロールバーが表示されないためです。そして、私はスクロールペインが必要かもしれません。
私が試したこと
そこで、「非表示のコンポーネントをフィラーとして使用する」で説明されているようfillers
に、を使用しようとしましたが、機能しません。Oracleのドキュメントにはありますが、まさに私が必要としていたもののようです。これが私の試みです:BoxLayout
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestBoxLayout implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TestBoxLayout());
}
@Override
public void run() {
JFrame f = new JFrame("test box layout");
JPanel b = new JPanel();
b.setLayout(new BoxLayout(b, BoxLayout.PAGE_AXIS));
b.add(new JTextField("field 1"));
b.add(new JTextField("field 2"));
b.add(new JTextField("field 3"));
b.add(Box.createVerticalGlue());
f.setContentPane(b);
f.setSize(500, 200);
f.setVisible(true);
}
}
これは私が得る結果です:
2回目の試行
の代わりにBoxクラスを使用しようとしましJPanel
たBoxLayout
が、視覚的な結果はまったく同じです。これが私の2回目の試みです:
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestBox implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TestBox());
}
@Override
public void run() {
JFrame f = new JFrame("test box");
Box b = Box.createVerticalBox();
b.add(new JTextField("field 1"));
b.add(new JTextField("field 2"));
b.add(new JTextField("field 3"));
b.add(Box.createVerticalGlue());
f.setContentPane(b);
f.setSize(500, 200);
f.setVisible(true);
}
}
やりたいこと
誰かが私がそれらのフィラーを修正してそれらを機能させる方法を知っていますか?与えられたコードの修正は素晴らしいでしょう。
これは私が絵の具を使って作った絵で、結果として私が欲しいものを示しています。