Java编程练习Day07

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();
    }
}

运行结果如下:
这里只是实现了计算器的界面,暂时还没有实现计算器的计算功能。
在这里插入图片描述

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

难啊楠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值