Java Tutorial/Swing/Box

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

Box.createVerticalGlue()

   <source lang="java">

import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.LayoutManager; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class BoxLayoutVerticalGlueTest {

 public static void main(String[] args) {
   JFrame f = new JFrame("Vertical BoxLayout-managed container");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   Container pane = new BoxPanel();
   f.setContentPane(pane);
   pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
   for (float align = 0.0f; align <= 1.0f; align += 0.25f) {
     JButton button = new JButton("X Alignment = " + align);
     button.setAlignmentX(align);
     pane.add(button);
     pane.add(Box.createVerticalGlue());
   }
   f.setSize(400, 300);
   f.setVisible(true);
 }

} class BoxPanel extends JPanel {

 public void paintChildren(Graphics g) {
   super.paintChildren(g);
   Dimension size = getSize();
   LayoutManager manager = getLayout();
   if ((manager != null) && (manager instanceof BoxLayout)) {
     BoxLayout layout = (BoxLayout) manager;
     boolean vertical = true;
     if (vertical) {
       int axis = (int) (layout.getLayoutAlignmentX(this) * size.width);
       g.fillRect(axis - 1, 0, 3, size.height);
     } else {
       int axis = (int) (layout.getLayoutAlignmentY(this) * size.height);
       g.fillRect(0, axis - 1, size.width, 3);
     }
   }
 }

}</source>





Box simplifies working with BoxLayout

  1. Box class is a Container for creating a single row or column of components using the BoxLayout manager.
  2. The Box container works like a JPanel with default layout manager, BoxLayout.
  3. You can use an inner class of Box called Box.Filler to better position components within the container.
  4. You have three ways to create a Box, offered by one constructor and two static factory methods:



   <source lang="java">

public Box(int direction) Box horizontalBox = new Box(BoxLayout.X_AXIS); Box verticalBox = new Box(BoxLayout.Y_AXIS); public static Box createHorizontalBox() Box horizontalBox = Box.createHorizontalBox(); public static Box createVerticalBox() Box verticalBox = Box.createVerticalBox();</source>





Creating Rigid Areas: Strut

  1. Struts can be two-dimensional, requiring you to specify the width and height of the component;
  2. Or, they can be one-dimensional, requiring you to specify either the width or height.



   <source lang="java">

public static Component createRigidArea(Dimension dimension) // Two-dimensional Component rigidArea = Box. createRigidArea(new Dimension(10, 10)); aBox.add(rigidArea);

public static Component createHorizontalStrut(int width) // One-dimensional: horizontal Component horizontalStrut = Box. createHorizontalStrut(10); aBox.add(horizontalStrut);

public static Component createVerticalStrut(int height) // One-dimensional: vertical Component verticalStrut = Box. createVerticalStrut(10); aBox.add(verticalStrut);</source>





new Box(BoxLayout.Y_AXIS)

   <source lang="java">

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JSlider; import javax.swing.JTextField; public class MainClass extends JFrame {

 public MainClass() {
   Box box = new Box(BoxLayout.Y_AXIS);
   box.add(new JButton("Test button"));
   box.add(new JSlider());
   box.add(new JTextField("Text field with some text", 20));
   box.add(new JButton("Another, bigger button"));
   getContentPane().add(box);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   pack();
 }
 public static void main(String[] args) {
   MainClass ex2 = new MainClass();
   ex2.setVisible(true);
 }

}</source>





Working with Box.Filler: Glue and Strut

Box.Filler creates invisible components for better component positioning.



   <source lang="java">

Creating Areas that Grow public static Component createGlue() // Direction independent Component glue = Box.createGlue(); aBox.add(glue); public static Component createHorizontalGlue(); // Direction dependent: horizontal Component horizontalGlue = Box.createHorizontalGlue(); aBox.add(horizontalGlue); public static Component createVerticalGlue() // Direction dependent: vertical Component verticalGlue = Box.createVerticalGlue(); aBox.add(verticalGlue);</source>