实例046 数组的下标界限

发布时间 2023-05-04 18:42:07作者: 两拳ko小yu

以下是使用Java文本框控件实现Java数组的下标界限完整代码,包括详细注释:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame implements ActionListener {
    // 定义窗口中需要用到的组件
    private JTextField textField;
    private JTextArea textArea;

    public static void main(String[] args) {
        new Test();
    }

    // 构造函数,在其中初始化窗口和组件,并添加事件监听器
    public Test() {
        setTitle("Array Index Limit");
        setSize(400, 300);

        // 创建一个面板并将其设置为流式布局(FlowLayout)
        JPanel panel = new JPanel(new FlowLayout());

        // 添加输入框、按钮和输出区域到面板上
        JLabel label = new JLabel("Enter an array index:");
        panel.add(label);

        textField = new JTextField(10); // 输入框可以容纳10个字符宽度
        panel.add(textField);

        JButton button = new JButton("Submit");
        button.addActionListener(this);     // 将当前对象作为事件处理程序注册给按钮
        panel.add(button);

        textArea = new JTextArea();
        textArea.setEditable(false);// 输出区不可编辑
        JScrollPane scrollPane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);// 设置滚动条出现条件
        scrollPane.setPreferredSize(getSize());
        add(panel, "North");// 面板放在北边
        add(scrollPane, "Center");// 滑块放在中间
        setVisible(true);// 显示窗口
    }

    // 事件处理程序,当按钮被点击时执行该方法
    public void actionPerformed(ActionEvent e) {
        try {
            int index = Integer.parseInt(textField.getText()); // 将输入框中的文本转换为整数类型

            int[] arr = {1,45,12,234,345,234,12,123,123}; // 创建一个长度为10的数组

            if (index < 0 || index >= arr.length) {     // 判断下标是否越界
                throw new ArrayIndexOutOfBoundsException("Array Index Out Of Bounds!");
            } else {
                textArea.setText("The array element at position " + index + " is: " + arr[index]);
            }
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(this, "Please enter a valid integer!", "Error", JOptionPane.ERROR_MESSAGE);
        } catch (ArrayIndexOutOfBoundsException ex) {
            JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        } finally {
            textField.setText("");      // 清空输入框内容
            textField.requestFocus();
        }// 输入焦点回到文本域
    }
}

在上述代码中,我们首先创建了一个 ArrayIndexLimit 类,并继承自 JFrame。然后,在构造函数里面初始化了窗口和组件,并添加了事件监听器。

其中使用 JPanel 来容纳需要用到的控件(包括 JLabel、 JTextField 和 JButton),并将其设置成流式布局(FlowLayout)。接着通过 add() 方法把这些控件加入进去。

最后还要注意一点:由于输出区可能会出现滚动条,因此我们采用 JScrollPane 控件来包装 JTextArea,以便在需要时出现滚动条。

事件处理程序 actionPerformed() 方法中的代码主要是实现了对输入框内容进行判断,并根据下标是否越界输出相应信息。如果用户没有正确地输入整数,则会弹出一个错误提示窗口;而当数组下标超过范围时则抛出 ArrayIndexOutOfBoundsException 异常并显示相关消息。最后,在 finally 块里面清空文本域和将焦点重新设置到文本框上方便再次使用。

在这个程序中,我们使用了 Java 的文本框控件 JTextField 和 JTextArea。其中,JTextField 是一个单行的输入框组件;而 JTextArea 则是多行的输出区域。

在构造函数里面初始化窗口和组件时,我们通过 new 关键字创建了两个对象:textField 和 textArea,并设置它们各自的属性(如大小、是否可编辑等)。然后将其添加到 JPanel 中并最终加入 JFrame 窗口中显示出来。

事件处理程序 actionPerformed() 方法则实现了对用户输入内容进行判断,并根据情况输出相应信息。具体地说,在该方法内部:

  1. 首先尝试把用户从 textField 输入进去的字符串转换成整数类型 index。
  2. 接着定义一个长度为 10 的数组 arr 并检查下标是否越界:
    • 如果超过范围,则会抛出 ArrayIndexOutOfBoundsException 异常;
    • 否则就可以直接访问指定位置上元素值并用 setText() 方法更新 textArea 显示结果。
  3. 在 try-catch 块结构之外还有一段代码清空 textField 内容以便再次使用,并且重新聚焦于此处方便新一轮操作开始。

总之,在这份完整代码示例当中展示给大家如何利用Java Swing 提供好看又易于交互式开发工具包快速搭建简洁美观但功能强大GUI 应用程式。