实例035 使用按钮控件数组实现计算器界面

实例035 使用按钮控件数组实现计算器界面

实例说明

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.mingrisoft;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

public class ButtonArrayExample extends 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]);
}
}
}
}

技术要点

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

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

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

1
public GridLayout(int rows, int cols)

参数说明

  • rows:布局的行数。
  • cols:布局的列数。

2. 设置容器的布局管理器

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

1
public void setLayout(LayoutManager mgr)

参数说明

  • mgr:布局管理器对象