• Java基础之创建窗口——使用BoxLayout管理器(TryBoxLayout4)


    控制台程序。

    javax.swing.BoxLayout类定义的布局管理器在单行或单列中布局组件。创建BoxLayout对象时,需要指定是在行还是列中布局组件。

    对于行,组件是从左到右地添加;对于列,组件是从上到下地添加。行或列已满时,给定行或列中的组件不会放到下一行或列中。当添加的组件数超出行或列的可用空间时,布局管理器会减小组件的大小,甚至能根据需要剪切组件,使它们都放在单行或单列中。有了一行组件后,方框布局管理器就会尝试使所有的组件高度都相同,或者尝试使一列组件的宽度相同。

      1 import javax.swing.*;
      2 import java.awt.*;
      3 import javax.swing.border.*;
      4 
      5 public class TryBoxLayout4 {
      6 
      7   public static void createWindow(){
      8     JFrame aWindow = new JFrame("This is the Window Title");
      9     Toolkit theKit = aWindow.getToolkit();                             // Get the window toolkit
     10     Dimension wndSize = theKit.getScreenSize();                        // Get screen size
     11 
     12     // Set the position to screen center & size to half screen size
     13     aWindow.setSize(wndSize.width/2, wndSize.height/2);                // Set window size
     14     aWindow.setLocationRelativeTo(null);                               // Center window
     15     aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     16 
     17     // Create left column of radio buttons
     18     Box left = Box.createVerticalBox();
     19     left.add(Box.createVerticalStrut(30));                             // Starting space
     20     ButtonGroup radioGroup = new ButtonGroup();                        // Create button group
     21     JRadioButton rbutton;                                              // Stores a button
     22     radioGroup.add(rbutton = new JRadioButton("Red"));                 // Add to group
     23     left.add(rbutton);                                                 // Add to Box
     24     left.add(Box.createVerticalStrut(30));                             // Space between
     25     radioGroup.add(rbutton = new JRadioButton("Green"));
     26     left.add(rbutton);
     27     left.add(Box.createVerticalStrut(30));                             // Space between
     28     radioGroup.add(rbutton = new JRadioButton("Blue"));
     29     left.add(rbutton);
     30     left.add(Box.createVerticalStrut(30));                             // Space between
     31     radioGroup.add(rbutton = new JRadioButton("Yellow"));
     32     left.add(rbutton);
     33     left.add(Box.createGlue());                                        // Glue at the end
     34 
     35     // Create a panel with a titled border to hold the left Box container
     36     JPanel leftPanel = new JPanel(new BorderLayout());
     37     leftPanel.setBorder(new TitledBorder(
     38                                    new EtchedBorder(),                 // Border to use
     39                                    "Line Color"));                     // Border title
     40     leftPanel.add(left, BorderLayout.CENTER);
     41 
     42     // Create right columns of checkboxes
     43     Box right = Box.createVerticalBox();
     44     right.add(Box.createVerticalStrut(30));                            // Starting space
     45     right.add(new JCheckBox("Dashed"));
     46     right.add(Box.createVerticalStrut(30));                            // Space between
     47     right.add(new JCheckBox("Thick"));
     48     right.add(Box.createVerticalStrut(30));                            // Space between
     49     right.add(new JCheckBox("Rounded"));
     50     right.add(Box.createGlue());                                       // Glue at the end
     51 
     52     // Create a panel with a titled border to hold the right Box container
     53     JPanel rightPanel = new JPanel(new BorderLayout());
     54     rightPanel.setBorder(new TitledBorder(
     55                                    new EtchedBorder(),                 // Border to use
     56                                    "Line Properties"));                // Border title
     57     rightPanel.add(right, BorderLayout.CENTER);
     58 
     59     // Create top row to hold left and right
     60     Box top = Box.createHorizontalBox();
     61     top.add(leftPanel);
     62     top.add(Box.createHorizontalStrut(5));                             // Space between vertical boxes
     63     top.add(rightPanel);
     64 
     65     // Create bottom row of buttons
     66     JPanel bottomPanel = new JPanel();
     67     bottomPanel.setBorder(new CompoundBorder(
     68            BorderFactory.createLineBorder(Color.black, 1),             // Outer border
     69            BorderFactory.createBevelBorder(BevelBorder.RAISED)));      // Inner border
     70     Border edge = BorderFactory.createRaisedBevelBorder();             // Button border
     71     JButton button;
     72     Dimension size = new Dimension(80,20);
     73     bottomPanel.add(button = new JButton("Defaults"));
     74     button.setBorder(edge);
     75     button.setPreferredSize(size);
     76     bottomPanel.add(button = new JButton("OK"));
     77     button.setBorder(edge);
     78     button.setPreferredSize(size);
     79     bottomPanel.add(button = new JButton("Cancel"));
     80     button.setBorder(edge);
     81     button.setPreferredSize(size);
     82 
     83     // Add top and bottom panel to content pane
     84     Container content = aWindow.getContentPane();                      // Get content pane
     85     BoxLayout box = new BoxLayout(content, BoxLayout.Y_AXIS);
     86                                                                        // Vertical for content pane
     87     content.setLayout(box);                                            // Set box layout manager
     88     content.add(top);
     89     content.add(bottomPanel);
     90 
     91     aWindow.pack();                                                    // Size for components
     92     aWindow.setVisible(true);                                          // Display the window
     93   }
     94 
     95   public static void main(String[] args) {
     96     SwingUtilities.invokeLater(new Runnable() {
     97             public void run() {
     98                 createWindow();
     99             }
    100         });
    101   }
    102 }

    Box类包含的静态方法可以创建不可见的组件,叫做“支柱(strut)"。垂直支柱有给定的高度(单位是像素),宽度为0。水平支柱有给定的宽度(单位是像素),高度为0。这些支柱的作用是允许在组件之间插入水平或垂直空格。
    Box类中的createVerticalStrut()方法把垂直支柱返回为Component类型的对象。方法的参数指定了支柱的高度(单位为像素)。

    使用"胶“(glue)可以控制Box对象中的剩余空间如何分配。胶是不可见的组件,唯一作用就是占据Box容器的剩余空间。尽管"胶"这个名称给人的印象是把组件捆绑在一起,但实际上,胶提供了两个组件之间的弹性连接器,这种连接器可以根据需要拉长或缩短,所以更像是弹簧。可以把胶组件放在Box中的组件之间,也可以放在Box对象的一端或两端。放置好组件后,剩余空间会在胶组件之间分配。

  • 相关阅读:
    POJ 1988 Cube Stacking(带权并查集)
    POJ 1414 Life Line(搜索)
    POJ 3468 A Simple Problem with Integers (线段树多点更新模板)
    二叉树前序遍历+中序遍历->后序遍历
    POJ 1061 青蛙的约会(扩展欧几里得)
    XDOJ 1020 ACMer去刷题吧(基础dp)
    POJ 2823 Sliding Window (线段树区间查询)
    线段树学习(一)
    UVA 294 Divisors( 因子分解)
    YYN图论学习路线(推荐)
  • 原文地址:https://www.cnblogs.com/mannixiang/p/3466216.html
Copyright © 2020-2023  润新知