package com.example.client.service; import com.example.client.dto.ColumnDto; import com.example.client.dto.JComboBoxItem; import com.example.client.utils.*; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3; import com.example.server.progressTrack.service.*; import com.example.server.utils.DownLoadTmpFile; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.event.*; import java.io.File; import java.util.Date; import java.util.List; @Service public class ImportDismantTrackService { private JTable table; private JFrame frame; @Value("${data.imgDir}") private String imgPath; private File selectedFiles; @Value("${data.tmp-path}") private String tmpPath; @Autowired DjJdgzDismantTrackService djJdgzDismantTrackService; @Autowired SubunitAddOrUpdate addOrUpdate; public void FileUpload(Long level3Id, JFrame jFrame) { frame = new JFrame("导入"); frame.setSize(500, 300); frame.setResizable(true); frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.addWindowListener(new WindowAdapter() { //添加第二个界面的关闭事件: public void windowClosing(WindowEvent e) { //添加事件: jFrame.setEnabled(true);//将主界面再设置为可操作的 } }); GridBagLayout layout = new GridBagLayout(); frame.setLayout(layout); table = new JTable(); table.setRowHeight(40); DefaultTableModel model = new DefaultTableModel(); String[] columnIdentifiers = {"文件地址", "操作"};//表头 JButton downloadbtn = new JButton("子部件模板下载"); downloadbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DownLoadTmpFile.down(tmpPath + "子部件导入模板.xlsx", frame); } }); JScrollPane scrolltable = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrolltable.setViewportView(table); scrolltable.getViewport().setBackground(Color.WHITE); JButton browseButton = new JButton("选择文件"); JButton uploadButton = new JButton("上传文件"); frame.add(downloadbtn, new GBC(0, 0, 2, 1).setFill(GBC.BOTH).setInsets(5)); frame.add(browseButton, new GBC(0, 1, 1, 1).setWeight(0, 1).setInsets(5)); frame.add(scrolltable, new GBC(1, 1, 3, 1).setFill(GBC.BOTH).setWeight(0, 1).setInsets(5)); frame.add(uploadButton, new GBC(0, 2, 4, 1).setWeight(1, 0)); browseButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Boolean flag = true; // 保存当前的外观设置 LookAndFeel savedLookAndFeel = UIManager.getLookAndFeel(); // 设置文件选择器外观 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) { ex.printStackTrace(); } JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("选择文件"); fileChooser.setPreferredSize(new Dimension(800, 500)); fileChooser.setMultiSelectionEnabled(true); //恢复外观,避免改变所有组件外观 try { UIManager.setLookAndFeel(savedLookAndFeel); } catch (UnsupportedLookAndFeelException ed) { ed.printStackTrace(); } int result = fileChooser.showOpenDialog(frame); if (result == JFileChooser.FILES_ONLY) { selectedFiles = fileChooser.getSelectedFile(); Integer oldNum = model.getRowCount(); String[][] data = new String[oldNum + 1][2]; for (int i = 0; i < oldNum; i++) { data[i][0] = model.getValueAt(i, 0).toString(); } String suffix = selectedFiles.getName().substring(selectedFiles.getName().lastIndexOf(".")); if (suffix.equals(".xlsx") || suffix.equals(".xls")) { data[oldNum][0] = selectedFiles.getPath(); } else { flag = false; } if (!flag) { JOptionPane.showMessageDialog(null, "只能上传.xlsx或.xls的文件,且不超过2G", "提示", JOptionPane.WARNING_MESSAGE); return; } model.setDataVector(data, columnIdentifiers); table.setModel(model); table.getColumnModel().getColumn(0).setPreferredWidth(600); table.getColumnModel().getColumn(1).setPreferredWidth(100); table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer()); table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton()); table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null, null)); } else { Object[] options = {"OK ", "CANCEL "}; JOptionPane.showOptionDialog(null, "选择的文件不正确 ", "提示", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); } } }); uploadButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 创建旋转等待框的实例(假设WaitUtil是一个自定义的Swing组件) final WaitUtil waitUtil = new WaitUtil(imgPath, "文件正在导入,请稍候"); // 开始上传文件的异步任务 SwingWorker sw = new SwingWorker() { @Override protected String doInBackground() throws Exception { // 上传文件的逻辑 StringBuilder result = new StringBuilder(); // 从第一列(索引为0)获取数据 String data = model.getValueAt(0, 0).toString(); // 将数据和换行符拼接到StringBuilder中 result.append(data); String filePath = result.toString(); String flag = djJdgzDismantTrackService.importExcel(filePath); return flag; } @Override protected void done() { try { // 获取上传结果(在这个例子中,我们假设上传方法返回Boolean类型) String uploadSucceeded = get(); // 刷新表格数据(如果上传成功) if (uploadSucceeded.equals("true")) { waitUtil.dispose(); frame.dispose(); jFrame.setEnabled(true);//将主界面再设置为可操作的 addOrUpdate.refreshTable(level3Id, jFrame); System.out.println("导入成功时间" + new Date()); } else { waitUtil.dispose(); JOptionPane.showMessageDialog(null, uploadSucceeded, "提示", JOptionPane.ERROR_MESSAGE); } } catch (Exception ex) { ex.printStackTrace(); waitUtil.dispose(); } } }; // 执行异步任务 sw.execute(); waitUtil.setVisible(true); } }); scrolltable.setTransferHandler(new TransferHandler() { private static final long serialVersionUID = 1L; @Override public boolean importData(JComponent comp, Transferable t) { try { Boolean flag = true; Object o = t.getTransferData(DataFlavor.javaFileListFlavor); String filepath = o.toString(); if (filepath.startsWith("[")) { filepath = filepath.substring(1); } if (filepath.endsWith("]")) { filepath = filepath.substring(0, filepath.length() - 1); } String[] filepathArr = filepath.split(", "); Integer oldNum = model.getRowCount(); String[][] data = new String[oldNum + filepathArr.length][2]; for (int i = 0; i < oldNum; i++) { data[i][0] = model.getValueAt(i, 0).toString(); } for (int i = 0; i < filepathArr.length; i++) { if (filepathArr[i].contains(".xlsx") || filepathArr[i].contains(".xls")) { data[i + oldNum][0] = filepathArr[i]; } else { flag = false; break; } } if (!flag) { JOptionPane.showMessageDialog(null, "只能上传.xlsx或.xls的文件,且不超过2G\"", "提示", JOptionPane.WARNING_MESSAGE); return flag; } model.setDataVector(data, columnIdentifiers); table.setModel(model); table.getColumnModel().getColumn(0).setPreferredWidth(650); table.getColumnModel().getColumn(1).setPreferredWidth(80); table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer()); table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton()); table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null, null)); return true; } catch (Exception e) { e.printStackTrace(); } return false; } @Override public boolean canImport(JComponent comp, DataFlavor[] flavors) { for (int i = 0; i < flavors.length; i++) { if (DataFlavor.javaFileListFlavor.equals(flavors[i])) { return true; } } return false; } }); } }