レイアウトマネージャーを捨てることによって、あなたは突然その仕事に責任を持つようになります。私が追加するかもしれない仕事、それは簡単ではありません...
基本的に、例を挙げれば、子コンポーネントのサイズを設定できていません...
JFrame f = new JFrame();
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel total = new JPanel();
total.setLayout(null);
total.setSize(f.getWidth(), f.getHeight());
total.setBackground(Color.green);
JPanel box = new JPanel();
box.setLocation(100, 200);
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
box.add(new JButton("test"));
box.add(new JLabel("hey"));
box.setSize(100, 100); // <-- Don't forget this..
total.add(box);
f.add(total);
f.setVisible(true);
個人的には、あなたがトラブルを求めていると思いますが、私は何を知っているでしょうか...
より良いアイデアは、EmptyBorder
パディングを提供するためのようなものを使用することかもしれません...
JFrame f = new JFrame();
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel total = new JPanel(new BorderLayout());
total.setSize(f.getWidth(), f.getHeight());
total.setBackground(Color.green);
total.setBorder(new EmptyBorder(100, 200, 100, 200));
JPanel box = new JPanel();
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
box.add(new JButton("test"));
box.add(new JLabel("hey"));
total.add(box);
f.add(total);
f.setVisible(true);
レイアウトマネージャーの例で更新
これで、すべてのレイアウトマネージャーが失敗した場合は、独自のレイアウトマネージャーを作成してみてください。これには、レイアウトマネージャーに必要なnull
メリットと、Swingのコンポーネント変更プロセスに統合するメリットがありますComponentListeners
。ContainerListeners
JPanel total = new JPanel();
total.setLayout(new SuperAwesomeBetterThenYoursLayout());
カスタムレイアウトマネージャー
public static class SuperAwesomeBetterThenYoursLayout implements LayoutManager {
@Override
public void addLayoutComponent(String name, Component comp) {
}
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return new Dimension(100, 300);
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(100, 300);
}
@Override
public void layoutContainer(Container parent) {
boolean laidOut = false;
for (Component child : parent.getComponents()) {
if (child.isVisible() && !laidOut) {
child.setLocation(200, 100);
child.setSize(child.getPreferredSize());
} else {
child.setSize(0, 0);
}
}
}
}
これは基本的にあなたがとにかくしなければならない仕事を表していますが、Swingがどのように設計されたかと連動する方法でそれを行います...