Java编程练习Day07
数组的下标界限
问题描述 数组可以保存同一类型的大量数据,由于它在内存中创建控件,存取速度快,所以常用于取代数据量少的数据库操作,这样可以提高程序运行的速度。但是数组也有一定的范围限制,因为数组长度是不可变的,在创建数组时就指定了数组的下标范围,如果使用了下标范围之外的索引值,Java就会抛出ArrayOutOfBoundsException数组下标越界异常,所以开发程序时一定要留意数组下标的引用。
本实例接收用户输入来指定数组下标,从而提取数组元素值,如果用户输入下标过大则程序会显示异常信息。
本实例要从文本框接收整数输入,这要考虑用户输入格式问题,如果用户输入小数或者非数字的字符,程序要多做一些验证操作,这样比较费时,而且容易出错,不易于维护。所以本实例采用了JFormattedTextField文本框控件,该文本框在创建控件的构造方法中可以指定格式器类型,然后其只接收该类型的数据。
创建格式文本框 本实例使用JFormattedTextField文本框控件的构造方法并传递NumberFormat抽象的实现类,使用**NumberFormat.getIntegerInstance()**方法获取整数格式对象,将该对象传递给JFormattedTextField文本框控件的构造方法就可以创建只接收整数的文本框控件。 关键代码如下:
codeFiled = new JFormattedTextField(NumberFormat.getIntegerInstance());
获取整数数值
JFormattedTextField文本框控件集成了JTextField文本框的getText()方法获取输入的文本字符串,同时还提供了getValue()方法获取指定格式类型的数值 其语法声明如下:
public Object getValue()
设计过程 1.在项目中创建窗体类ArrayBound。在窗体中添加一个文本框,一个文本域和一个按钮控件。 2.编写“确定”按钮的事件处理方法,在该方法中获取用户在文本框中输入的下标索引数字,然后通过这个下标索引从infos数组中提取对应的数组元素并显示在文本域控件中,如果发生数组下标越界异常,则在文本域空间中显示信息。
具体代码如下:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
public class ArrayBound extends JFrame {
JFormattedTextField codeFiled;
JLabel tip1;
JLabel tip2;
JButton go;
JTextArea messageArea;
Box box;
Box box1;
Box box2;
Box box3;
private String[] infos = {"50元奖金","唱一首歌","学狗叫","为大家讲一个笑话","3万元奖金"};
public ArrayBound(){
codeFiled = new JFormattedTextField(NumberFormat.getIntegerInstance());
tip1 = new JLabel("聚会趣味题:");
tip2 = new JLabel("题目编号:");
go = new JButton("确定");
messageArea = new JTextArea(10,5);
setTitle("数组下标越界异常");
setBounds(300,300,500,200);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
go.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int index = ((Number)codeFiled.getValue()).intValue();
try {
messageArea.setText(infos[index]);
}catch(Exception e2) {
messageArea.setText("发生异常:\n" + e2.toString());
}
}
});
box = Box.createVerticalBox();
box1 = Box.createHorizontalBox();
box2 = Box.createHorizontalBox();
box3 = Box.createHorizontalBox();
box1.add(tip1);
box2.add(tip2);
box2.add(codeFiled);
box2.add(go);
box3.add(messageArea);
box.add(box1);
box.add(box2);
box.add(box3);
add(box);
}
public static void main(String[] args) {
new ArrayBound();
}
}
运行结果如下:   如下图,用户所输入的下标已经超过了数组的下标,抛出数组下标越界异常,显示在文本框中。 
按钮控件数组实现计算机界面
实例说明 数组的应用范围非常广泛,灵活运用可以提高程序的开发效率,减少重复代码。 本实例通过按钮数组来管理界面中的所有按钮控件,从而使用最少的代码实现模拟的计算机界面。
GridLayout布局管理器的应用 通过它可以自动完成控件的布局与大小控制;否则,还要单独创建控制每个控件位置与大小的代码,其复杂度科相关而知。通过GridLayout布局u安利其,只需要指定布局的行列数量即可。
这里介绍GridLayout布局管理器 1.创建指定行列数量的布局管理器 可以在GridLayout类的构造方法中传递两个int类型的参数,分别指定布局的行数与列数,其方法声明如下:
public GridLayout(int rows,int cols)
参数说明 rows:布局的行数 cols:布局的列数
2.设置容器的布局管理器 创建容器布局管理器后,可以把他添加到某个容器的layout属性中,这需要调用容器的设置布局管理器的方法来实现其语法声明如下:
public void setLayout(LayoutManager mgr)
参数说明 mgr:布局管理器对象
具体代码如下:
import javax.swing.*;
import java.awt.*;
public class ButtonArrayExample extends JFrame {
JTextField textField;
public ButtonArrayExample(){
super();
BorderLayout borderLayout = (BorderLayout) getContentPane().getLayout();
borderLayout.setHgap(20);
borderLayout.setVgap(10);
setTitle("按钮数组实现计算器界面");
setVisible(true);
setBounds(100,100,290,282);
setDefaultCloseOperation(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]);
}
}
}
public static void main(String[] args) {
new ButtonArrayExample();
}
}
运行结果如下: 这里只是实现了计算器的界面,暂时还没有实现计算器的计算功能。 
|