按钮控件数组实现计算器界面

       数组的应用范围非常广泛,灵活运用可以提高程序的开发效率,减少重复代码。例如,本实例通过按钮数组来管理界面中的所有按钮控件,从而使用最少的代码实现了模拟的计算器界面。实例运行效果如图


        本实例的关键点在于GridLayout布局管理器的应用,通过它可以自动完成控件的布局与大小控制;否则,还要单独创建控制每个控件位置与大小的代码,其代码复杂度可想而知。通过GridLayout布局管理器,只需要指定布局的行列数量即可。下面介绍GUI如何使用GridLayout布局管理器。

q 创建指定行列数量的布局管理器

可以在GridLayout类的构造方法中传递两个int类型的参数,分别指定布局的行数与列数,其方法声明如下:

public GridLayout(int rows, int cols)

参数说明

Œ rows:布局的行数。

 cols:布局的列数。

q 设置容器的布局管理器

创建容器布局管理器后,可以把它添加到某个容器的layout属性中,这需要调用容器的设置布局管理器的方法来实现,其语法声明如下:

public void setLayout(LayoutManager mgr)

参数说明

mgr:布局管理器对象。

       在项目中创建ButtonArrayExample窗体类。在窗体中添加一个文本框控件用于模拟计算器的液晶屏,然后在构造方法中设置窗体标题、布局管理器,并创建JButton控件的二维数组,其中每个数组元素都初始化为一个按钮控件,同时再声明一个按钮名称的字符串数组,这两个数组共同初始化界面中的所有按钮控件。代码如下:

import java.awt.Container;

import java.awt.GridLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.UIManager;

import javax.swing.JTextField;

import java.awt.BorderLayout;

import java.awt.Dimension;

import javax.swing.SwingConstants;

 

public class ButtonArrayExample extends JFrame { // 继承窗体类JFrame

    /**

 *

 */

    private static final long serialVersionUID = 6626440733001287873L;

    private JTextField textField;

    

    public static void main(String args[]) {

        try {

            UIManager

                    .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

        } catch (Throwable e) {

            e.printStackTrace();

        }

        ButtonArrayExample frame = new ButtonArrayExample();

        frame.setVisible(true); // 设置窗体可见,默认为不可见

    }

    

    public ButtonArrayExample() {

        super(); // 继承父类的构造方法

        BorderLayout borderLayout = (BorderLayout) getContentPane().getLayout();

        borderLayout.setHgap(20);

        borderLayout.setVgap(10);

        setTitle("按钮数组实现计算器界面 "); // 设置窗体的标题

        setBounds(100, 100, 290, 282); // 设置窗体的显示位置及大小

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭按钮的动作为退出

        textField = new JTextField();

        textField.setHorizontalAlignment(SwingConstants.TRAILING);

        textField.setPreferredSize(new Dimension(12, 50));

        getContentPane().add(textField, BorderLayout.NORTH);

        textField.setColumns(10);

        final GridLayout gridLayout = new GridLayout(4, 0); // 创建网格布局管理器对象

        gridLayout.setHgap(5); // 设置组件的水平间距

        gridLayout.setVgap(5); // 设置组件的垂直间距

        JPanel panel = new JPanel(); // 获得容器对象

        panel.setLayout(gridLayout); // 设置容器采用网格布局管理器

        getContentPane().add(panel, BorderLayout.CENTER);

        String[][] names = { { "1", "2", "3", "" }, { "4", "5", "6", "" },

                { "7", "8", "9", "×" }, { ".", "0", "=", "÷" } };

        JButton[][] buttons = new JButton[4][4];

        for (int row = 0; row < names.length; row++) {

            for (int col = 0; col < names.length; col++) {

                buttons[row][col] = new JButton(names[row][col]); // 创建按钮对象

                panel.add(buttons[row][col]); // 将按钮添加到面板中

            }

        }

    }

}


心法领悟:用数组管理重复类型的数据。

像本实例的界面设计一样,程序开发中有很多重复类型的数据,在界面设计器中可以清晰地看出重复性的按钮控件。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值