Java/Swing JFC/BoxLayout

Материал из Java эксперт
Перейти к: навигация, поиск

Align your components in horizontal or vertical layout

 
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JFrame {
  public Main() {
    super("Demostrating BoxLayout");
    final int SIZE = 3;
    Container c = getContentPane();
    c.setLayout(new BorderLayout(30, 30));
    Box boxes[] = new Box[4];
    boxes[0] = Box.createHorizontalBox();
    boxes[1] = Box.createVerticalBox();
    boxes[2] = Box.createHorizontalBox();
    boxes[3] = Box.createVerticalBox();
    for (int i = 0; i < SIZE; i++)
      boxes[0].add(new JButton("boxes[0]: " + i));
    for (int i = 0; i < SIZE; i++) {
      boxes[1].add(Box.createVerticalStrut(25));
      boxes[1].add(new JButton("boxes[1]: " + i));
    }
    for (int i = 0; i < SIZE; i++) {
      boxes[2].add(Box.createHorizontalGlue());
      boxes[2].add(new JButton("boxes[2]: " + i));
    }
    for (int i = 0; i < SIZE; i++) {
      boxes[3].add(Box.createRigidArea(new Dimension(12, 8)));
      boxes[3].add(new JButton("boxes[3]: " + i));
    }
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    for (int i = 0; i < SIZE; i++) {
      panel.add(Box.createGlue());
      panel.add(new JButton("panel: " + i));
    }
    c.add(boxes[0], BorderLayout.NORTH);
    c.add(boxes[1], BorderLayout.EAST);
    c.add(boxes[2], BorderLayout.SOUTH);
    c.add(boxes[3], BorderLayout.WEST);
    c.add(panel, BorderLayout.CENTER);
    setSize(350, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    
  }
  public static void main(String args[]) {
    Main app = new Main();
  }
}





A vertical box container arranges the components top-to-bottom aligned in their preferred sizes.

  
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component1 = new JButton();
    JButton component2 = new JButton();
    // Create vertical box container
    Box box = new Box(BoxLayout.Y_AXIS);
    // create a vertical box container
    box = Box.createVerticalBox();
    // Add components
    box.add(component1);
    box.add(component2);
  }
}





BoxLayout puts components into a row or into a column

 
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TwoButtons {
    public static void main(String[] args) {
      JFrame f = new JFrame();
      JPanel basic = new JPanel();
      basic.setLayout(new BoxLayout(basic, BoxLayout.Y_AXIS));
      f.add(basic);
      basic.add(Box.createVerticalGlue());
      JPanel bottom = new JPanel();
      bottom.setAlignmentX(1f);
      bottom.setLayout(new BoxLayout(bottom, BoxLayout.X_AXIS));
      JButton ok = new JButton("OK");
      JButton close = new JButton("Close");
      bottom.add(ok);
      bottom.add(Box.createRigidArea(new Dimension(5, 0)));
      bottom.add(close);
      bottom.add(Box.createRigidArea(new Dimension(15, 0)));
      basic.add(bottom);
      basic.add(Box.createRigidArea(new Dimension(0, 15)));
      f.setSize(300, 250);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.setVisible(true);
    }
}





BoxLayout: set a rigid area among our components.

 
import java.awt.Dimension;
import java.awt.Insets;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class RigidArea {
  public static void main(String[] args) {
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.setBorder(new EmptyBorder(new Insets(40, 60, 40, 60)));
    panel.add(new JButton("Button"));
    panel.add(Box.createRigidArea(new Dimension(0, 5)));
    panel.add(new JButton("Button"));
    panel.add(Box.createRigidArea(new Dimension(0, 5)));
    panel.add(new JButton("Button"));
    panel.add(Box.createRigidArea(new Dimension(0, 5)));
    panel.add(new JButton("Button"));
    JFrame f = new JFrame();
    f.add(panel);
    f.pack();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}





Glue spreads the components as far apart as possible.

  
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component1 = new JButton();
    JButton component2 = new JButton();
    Box box = new Box(BoxLayout.X_AXIS);
    
    box.add(component1);
    box.add(Box.createGlue());
    box.add(component2);
  }
}





Laying Out Components in a Row or Column

  
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component1 = new JButton();
    JButton component2 = new JButton();
    Box box = new Box(BoxLayout.X_AXIS);
    box = Box.createHorizontalBox();
    // Add components
    box.add(component1);
    box.add(component2);
  }
}





Separating Components in a Row or Column

  
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component1 = new JButton();
    JButton component2 = new JButton();
    Box box = new Box(BoxLayout.X_AXIS);
    
    box.add(component1);
    box.add(Box.createGlue());
    box.add(component2);
  }
}





Strut spreads the components apart by a fixed distance

  
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component1 = new JButton();
    Box box = new Box(BoxLayout.X_AXIS);
    int width = 10;
    box.add(Box.createHorizontalStrut(width));
    box.add(component1);
  }
}