Java学习之布局管理器

   布局就是各个组件在窗口中的位置,或为相对位置或为绝对位置。在界面编程中是必要的。

1、简介

    把 Swing 的各种组件(JComponent)添加到面板容器中(JPanel),需要给面板容器指定布局管理器(LayoutManager),明确容器(Container)内的各个组件之间的排列布局方式。

2、箱式布局

     由BoxLayout类实现的布局管理器称为箱式布局管理器,用来管理一组水平或垂直排列的组件,如果是用来管理一组水平排列的组件,则称为水平箱,效果如左图所示,如果是用来管理一组垂直排列的组件,则称为垂直箱,效果如右图所示

Swing 提供了一个实现了 BoxLayout 的容器组件Box。使用 Box 提供的静态方法,可快速创建水平/垂直箱容器(Box),以及填充组件之间空隙的不可见组件。

// 创建一个水平箱容器
Box hBox = Box.createHorizontalBox();
    
// 创建一个垂直箱容器
Box vBox = Box.createVerticalBox();

Box 内的组件之间默认没有空隙并居中,如果想在组件之间(或头部/尾部)添加空隙,可以在其中添加一个影响布局的不可见组件。

topicBox.add(Box.createHorizontalStrut(5));// 添加一个5像素宽的水平支柱 

box.add(Box.createVerticalStrut(5));// 添加一个5像素高的垂直支柱

contentBox.setAlignmentX(1);// 设置组件的水平调整值,靠右侧对齐

contentLabel.setAlignmentY(0);// 设置组件的垂直调整值,靠上方对齐

例如将一根按钮添加到箱式容器里面:

        JButton submitButton = new JButton("确定");// 创建一个按钮
        submitButton.setAlignmentX(1);// 设置组件的水平调整值,靠右侧对齐
        box.add(submitButton);// 添加到垂直箱容器中

3、卡片布局管理器

CardLayout类实现的布局管理器称为卡片布局管理器,用来操纵其所管理容器中包含的容器或组件。每个直接添加到其所管理容器中的容器或组件为一个卡片,最先被添加到其所管理容器中的容器或组件被认为是第一个卡片,最后被添加的则为最后一个卡片,初次运行时将显示第一个卡片。

创建一个卡片布局管理器:

        cardLayout = new CardLayout();// 创建一个卡片布局管理器对象
        cardPanel = new JPanel(cardLayout);// 创建一个采用片布局管理器的面板对象
        getContentPane().add(cardPanel, BorderLayout.CENTER);// 添加到窗体中间

卡片中添加组件

 JButton btn01 = new JButton("Button01");

  panel.add(btn01, "btn01"); //btn01为一个组件,"btn01"为卡片的名字

 

常用的方法:

// 显示第一张卡片 void first(Container parent);

// 显示最后一张卡片 void last(Container parent);

// 显示下一张卡片(自动循环显示) void next(Container parent);

// 显示上一张卡片(自动循环显示) void previous(Container parent);

// 显示指定名称的组件(添加组件到容器时,可同时添加组件的名称) void show(Container parent, String name);

4、网格组布局管理器

GridBagLayout类实现的布局管理器称为网格组布局管理器,它实现了一个动态的矩形网格,这个矩形网格由无数个矩形单元格组成,每个组件可以占用一个或多个这样的单元格。所谓动态的矩形网格,就是可以根据实际需要随意增减矩形网格的行数和列数。

设置为网格布局

        getContentPane().setLayout(new GridBagLayout());

添加一个组件到一个网格里面,这里例如一个按钮

        final JButton button = new JButton("A");
        final GridBagConstraints gridBagConstraints = new GridBagConstraints(); //布局管理器
        gridBagConstraints.gridy = 0;// 起始点为第1行
        gridBagConstraints.gridx = 0;// 起始点为第1列
        gridBagConstraints.weightx = 10;// 第一列的分布方式为10%
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;//组件 在其 显示区域内 的填充方式
        getContentPane().add(button, gridBagConstraints);

5、弹簧布局管理器

     弹簧布局管理器以容器和组件的边缘为操纵对象,通过为组件和容器边缘以及组件和组件边缘建立约束,实现对组件布局的管理,如下图所示


 

        // 创建弹簧布局管理器对象
        SpringLayout springLayout = new SpringLayout();
        Container contentPane = getContentPane();// 获得窗体容器对象
        // 将窗体容器修改为采用弹簧布局管理器
        contentPane.setLayout(springLayout);

设置弹簧的距离

        JLabel topicLabel = new JLabel("主题:");
        contentPane.add(topicLabel);
        // 主题标签北侧——>容器北侧
        springLayout.putConstraint(NORTH, topicLabel, 15, NORTH, contentPane);
        // 主题标签西侧——>容器西侧
        springLayout.putConstraint(WEST, topicLabel, 5, WEST, contentPane); 

支柱和弹簧:

        Spring vST = Spring.constant(20);// 创建一个支柱
        Spring hSP = Spring.constant(20, 100, 500);// 创建一个弹簧
        
        JButton lButton = new JButton("按钮L");
        getContentPane().add(lButton);
        springLayout.putConstraint(NORTH, lButton, vST, NORTH,getContentPane());// “按钮L”北侧——>容器北侧
        springLayout.putConstraint(WEST, lButton, hSP, WEST,getContentPane());// “按钮L”西侧——>容器西侧

利用弹簧控制组件大小:

        JButton lButton = new JButton("按钮L");
        getContentPane().add(lButton);

        Spring widthSP = Spring.constant(60, 300, 600);// 创建一个弹簧
        Spring heightST = Spring.constant(60);// 创建一个支柱
        // 获得“按钮L”的Constraints对象
        Constraints lButtonCons = springLayout.getConstraints(lButton);
        lButtonCons.setWidth(widthSP);// 设置控制组件宽度的弹簧
        lButtonCons.setHeight(heightST);// 设置控制组件高度的支柱

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值