javaSYKS

1、建立一个GUI程序

2、输入任意个整数

3、对数据进行排序,要求使用线程实现输入数据的排序,用户每输入一个数据就通知排序线程的当前输入的所有数据排序

4、将排序后的数据写入文件

5、利用面向对象的思想设计数据集合类、界面类

6、数据集合类要具有插入、删除、查找、排序等方法,不能使用Tlist等系统提供的集合类。

7、可以使用GUI设计工具。

package test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Arrays;

public class IntegerInputSortSaveFileGUI extends JFrame {
    private JTextField textField;
    private JButton buttonEnter, buttonSort, buttonDelete, buttonFind;
    private JTextArea textArea;

    private NumberList numberList = new NumberList();
    private Thread sortThread;
    private final Object lock = new Object(); // 对共享变量性质的锁

    public IntegerInputSortSaveFileGUI() {
        super("数字输入排序保存GUI");
        setSize(400, 300);
        setLocationRelativeTo(null); //参数为null时居中显示
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //添加窗口布局和控件
        JPanel panel = new JPanel();
        add(panel);

        JLabel label = new JLabel("请输入数字:");
        panel.add(label);

        textField = new JTextField(10); // 可输入10个字符
        panel.add(textField);

        buttonEnter = new JButton("输入");
        buttonEnter.addActionListener(e -> enterButtonAction()); //lambda表达式添加事件监听器
        panel.add(buttonEnter);

        buttonSort = new JButton("排序");
        buttonSort.addActionListener(e -> sortButtonAction()); //lambda表达式添加事件监听器
        panel.add(buttonSort);

        buttonDelete = new JButton("删除");
        buttonDelete.addActionListener(e -> deleteButtonAction());
        panel.add(buttonDelete);

        buttonFind = new JButton("查找");
        buttonFind.addActionListener(e -> findButtonAction());
        panel.add(buttonFind);

        textArea = new JTextArea(10, 20);
        textArea.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(textArea); // 添加滑动条
        panel.add(scrollPane);

        setVisible(true);
    }

    private void enterButtonAction() {
        try {
            int num = Integer.parseInt(textField.getText().trim()); // 转换为int类型
            numberList.insert(num);
            SwingUtilities.invokeLater(() -> showNumbers()); // 异步更新GUI界面
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(this, "请输入正确的数字!");
        } finally {
            textField.setText(""); // 清空文本框内容
            textField.requestFocus(); // 文本框重新获得焦点
        }
    }

    private void sortButtonAction() {
        synchronized (lock) {
            numberList.sort();
            SwingUtilities.invokeLater(() -> showNumbers());
            saveToFile();
        }
    }

    private void deleteButtonAction() {
        String inputStr = JOptionPane.showInputDialog(this, "请输入待删除的数字:");
        if (inputStr != null) { // 用户点击取消时返回null
            try {
                int num = Integer.parseInt(inputStr.trim());
                if (numberList.delete(num)) {
                    SwingUtilities.invokeLater(() -> showNumbers());
                    saveToFile();
                } else {
                    JOptionPane.showMessageDialog(this, "该数字不存在!");
                }
            } catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(this, "请输入正确的数字!");
            }
        }
    }

    private void findButtonAction() {
        String inputStr = JOptionPane.showInputDialog(this, "请输入待查找的数字:");
        if (inputStr != null) { // 用户点击取消时返回null
            try {
                int num = Integer.parseInt(inputStr.trim());
                int index = numberList.find(num);
                if (index >= 0) {
                    JOptionPane.showMessageDialog(this, "该数字位于数据集合中的位置为:" + (index + 1)); // 位置从1开始,所以在查询结果加1
                } else {
                    JOptionPane.showMessageDialog(this, "该数字不存在!");
                }
            } catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(this, "请输入正确的数字!");
            }
        }
    }

    private void startSortThread() {
        sortThread = new Thread(() -> {
            while (true) {
                synchronized (lock) { // 加锁判断是否需要排序
                    try {
                        lock.wait(); // 线程进入等待状态,直到有新数据需要排序
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    numberList.sort();
                    SwingUtilities.invokeLater(() -> showNumbers()); // 异步更新GUI界面
                    saveToFile();
                }
            }
        });
        sortThread.start();
    }

    private void showNumbers() {
        textArea.setText(numberList.toString()); // 将数字展示在文本区域中
    }

    private void saveToFile() {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter("sorted_numbers.txt"));
            writer.write(numberList.toString());
            writer.close();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "写入文件出现错误!");
        }
    }

    public static void main(String[] args) {
        IntegerInputSortSaveFileGUI gui = new IntegerInputSortSaveFileGUI();
        gui.startSortThread(); // 创建并启动排序线程
    }
}

class NumberList {
    private int[] nums = new int[0];

    public void insert(int num) {
        int[] temp = Arrays.copyOf(nums, nums.length + 1);
        temp[nums.length] = num;
        nums = temp;
    }

    public boolean delete(int num) {
        int index = find(num);
        if (index >= 0) { // 找到了需要删除的数字
            int[] temp = new int[nums.length - 1];
            System.arraycopy(nums, 0, temp, 0, index); // 复制前面的元素
            System.arraycopy(nums, index + 1, temp, index, nums.length - index - 1); // 复制后面的元素
            nums = temp;
            return true;
        } else { // 没有找到所需删除的数字
            return false;
        }
    }

    public int find(int num) {
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == num) {
                return i;
            }
        }
        return -1; // 没有找到所需查找的数字
    }
    public void sort() {
        Arrays.sort(nums);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (int num : nums) {
            sb.append(num).append("\n");
        }
        return sb.toString();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值