ほとんどのレイアウト マネージャーには、引数のないコンストラクターがあります (つまり、 を使用して FlowLayout を作成したり、 を使用しnew FlowLayout ()
て GridLayout を作成したり、 を使用new GridLayout ()
して GridBagLayout を作成したりできますnew GridBagLayout ()
)。ただし、BoxLayout
管理するコンテナーと、コンポーネントを配置する軸の両方を渡す必要があります。
私の質問は次のとおりです。レイアウトマネージャーにレイアウトするコンポーネントを既に伝えているのに、なぜ書く必要があるのですか?
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
最初の行だけではなく?
ソース コードをざっと見てみると、BoxLayout
使用しているコンストラクター (178 ~ 185 行目) が呼び出しなどを行っていないことがわかりましtarget.setLayout(this)
た。それを追加するだけで本当に簡単になりそうです。Swing ライブラリに含まれていない理由はありますか?
それが問題なら、私は使用しています
Java バージョン 1.7.0
Java(TM) SE ランタイム環境 (ビルド 1.7.0-b147)
Win7Proで。
ありがとう!
SSCCE:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
public class BoxLayoutSSCCE extends JFrame {
// Change this to see what I mean
public static final boolean CALL_SET_LAYOUT = true;
public BoxLayoutSSCCE () {
super("Box Layout SSCCE");
JPanel panel = new JPanel();
BoxLayout bl = new BoxLayout(panel, BoxLayout.Y_AXIS);
if (CALL_SET_LAYOUT) {
panel.setLayout(bl);
}
panel.add(new JButton("Button 1"));
panel.add(new JButton("Button 2"));
}
public static void main (String[] args) {
BoxLayoutSSCCE blsscce = new BoxLayoutSSCCE();
blsscce.pack();
blsscce.setVisible(true);
}
}