首页>代码>java swing开发心理健康测评系统的设计与实现>/MentalHealth/src/GeneratingTestPaper.java
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class GeneratingTestPaper extends JFrame {
    private ArrayList<String[]> list = new ArrayList<>();
    private JTable table;
    private JLabel jLabel;
    private String name;
    private String fileName;
    private Container container;

    public GeneratingTestPaper(String name, Container container) throws IOException {
        this.name = name;
        this.container = container;
        setLayout(null);
        readBank();
        setTitle("生成试卷");
        setSize(1000, 500);
        setResizable(false);
        setLocationRelativeTo(getOwner());
        JScrollPane scrollPane = new JScrollPane();   //支持滚动
        scrollPane.setBounds(0, 0, 1000, 420);
        add(scrollPane);
        String[] columnNames = {"题目", "选项A", "分数", "选项B", "分数", "选项C", "分数", "选项D", "分数"};
        table = new JTable();   //自定义的表格
        DefaultTableModel defaultTable = (DefaultTableModel) table.getModel();
        for (String columnName : columnNames) {
            defaultTable.addColumn(columnName);
        }
        for (String[] lists : list) {
            defaultTable.addRow(lists);
        }
        adjustColumnWidth();
        scrollPane.setViewportView(table);
        JPanel buttonPanel = new JPanel(null);   //按钮面板
        add(buttonPanel);
        buttonPanel.setBounds(0, 420, 1000, 80);
        JButton selectAllButton = new JButton("全部选择");
        selectAllButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                table.selectAll();    //选中所有的行
            }
        });
        jLabel = new JLabel("友情提示!CTRL+鼠标左键单击可多选!");
        selectAllButton.setBounds(300, 5, 120, 30);
        buttonPanel.add(selectAllButton);
        JButton clearSelectionButton = new JButton("取消选择");
        clearSelectionButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                table.clearSelection();  //取消选择
            }
        });
        JButton determineGenerated = new JButton("确定生成");
        determineGenerated.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (table.getSelectedRowCount() > 20) {
                    JOptionPane.showMessageDialog(null, "最多选择20道题");
                } else {
                    if (createFile() && createTestPaper()) {
                        try {
                            writeTest();
                        } catch (IOException ioException) {
                            ioException.printStackTrace();
                        }
                        JOptionPane.showMessageDialog(null, "生成成功!");
                        dispose();
                        Examination.arrayList.clear();
                        Examination.names.clear();
                        container.setVisible(false);
                        new TeacherMenu(name);
                    } else {
                        JOptionPane.showMessageDialog(null, "生成失败!");
                    }
                }
            }
        });
        clearSelectionButton.setBounds(450, 5, 120, 30);
        buttonPanel.add(clearSelectionButton);
        jLabel.setForeground(Color.red);
        jLabel.setBounds(10, 5, 250, 30);
        buttonPanel.add(jLabel);
        determineGenerated.setBounds(600, 5, 120, 30);
        buttonPanel.add(determineGenerated);
    }

    public void readBank() throws IOException {
        FileInputStream fileInputStream = new FileInputStream("./lib/QuestionBank.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fileInputStream));
        String line;
        while ((line = br.readLine()) != null) {
            String[] arr = line.split("\\s+");
            String[] a = new String[9];
            int j = 0;
            for (int i = 0; i < arr.length; i++) {
                if (i % 3 == 1) {
                    continue;
                } else {
                    a[j] = arr[i];
                    j++;
                }
            }
            list.add(a);
        }
        br.close();
        fileInputStream.close();
    }

    public boolean createFile() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
        Date date = new Date(System.currentTimeMillis());
        fileName = "心理健康测试_" + name + "_" + simpleDateFormat.format(date);
        File file = new File("./lib/Examination/" + fileName);
        if (!file.exists()) {
            if (file.mkdir()) {
                return true;
            }
        }
        return false;
    }

    public boolean createTestPaper() {
        File file = new File("./lib/TestPaper/" + fileName + ".txt");
        if (!file.exists()) {
            try {
                file.createNewFile();
                return true;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    public void writeTest() throws IOException {
        File file = new File("./lib/TestPaper/" + fileName + ".txt");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        OutputStreamWriter writer = new OutputStreamWriter(fileOutputStream, "UTF-8");//指定以UTF-8格式写入文件
        int[] indexRow = table.getSelectedRows();
        for (int i : indexRow) {
            for (int j = 0; j < table.getColumnCount(); j++) {
                writer.write((String) table.getValueAt(i, j)+" ");
            }
            writer.write("\n");
        }
        writer.close();
    }

    public void adjustColumnWidth() {
        TableColumnModel tableColumnModel = table.getColumnModel();
        tableColumnModel.getColumn(0).setPreferredWidth(200);
        tableColumnModel.getColumn(1).setPreferredWidth(150);
        tableColumnModel.getColumn(2).setPreferredWidth(25);
        tableColumnModel.getColumn(3).setPreferredWidth(150);
        tableColumnModel.getColumn(4).setPreferredWidth(25);
        tableColumnModel.getColumn(5).setPreferredWidth(150);
        tableColumnModel.getColumn(6).setPreferredWidth(25);
        tableColumnModel.getColumn(7).setPreferredWidth(150);
        tableColumnModel.getColumn(8).setPreferredWidth(25);
    }

}
最近下载更多
wanglinddad  LV55 2024年3月9日
fenghuijun  LV26 2024年1月13日
计算机暴龙战士  LV19 2024年1月5日
305865088  LV8 2023年12月15日
Seaskye  LV14 2023年11月28日
2410068425  LV23 2023年11月27日
最代码官方  LV168 2023年11月26日
最近浏览更多
暂无贡献等级
ddman9009  LV25 7月4日
Hhuu88 6月16日
暂无贡献等级
120_wu  LV4 2024年12月3日
yimaoermao  LV1 2024年11月28日
微信网友_6234675614470144  LV1 2024年10月28日
Peny_ZH  LV5 2024年9月20日
thsgli  LV9 2024年8月21日
hmf1989 2024年7月25日
暂无贡献等级
zzs269285304  LV7 2024年7月17日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友