package com.docus.sw.fenpan; import com.docus.sw.Config; import com.docus.sw.souyin.SuoyinService; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; public class MyApplication { public static void main(String[] args) throws IOException { Config.loadConfig(); // 获取系统支持的外观信息 UIManager.LookAndFeelInfo[] lookAndFeels = UIManager.getInstalledLookAndFeels(); // 遍历可用的外观并设置所选外观 for (UIManager.LookAndFeelInfo info : lookAndFeels) { if ("Nimbus".equals(info.getName())) { // 选择Nimbus外观 try { UIManager.setLookAndFeel(info.getClassName()); break; } catch (Exception e) { e.printStackTrace(); } } } SwingUtilities.invokeLater(() -> createAndShowGUI()); } private static void createAndShowGUI() { JFrame frame = new JFrame("缩微工具"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); JTabbedPane tabbedPane = new JTabbedPane(); // 参数设置标签页 JPanel paramPanel = new JPanel(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(5, 5, 5, 5); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; paramPanel.add(new JLabel("宗前缀名:"), gbc); gbc.gridx = 1; gbc.anchor = GridBagConstraints.CENTER; JTextField zongPreJtf = new JTextField(20); paramPanel.add(zongPreJtf, gbc); JPanel sizePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); sizePanel.add(new JLabel("A3大小尺寸 长:")); JTextField a3LongJtf = new JTextField(5); sizePanel.add(a3LongJtf); sizePanel.add(new JLabel("宽:")); JTextField a3WidthJtf = new JTextField(5); sizePanel.add(a3WidthJtf); gbc.gridx = 0; gbc.gridy = 1; gbc.gridwidth = 2; gbc.anchor = GridBagConstraints.WEST; paramPanel.add(sizePanel, gbc); gbc.gridx = 0; gbc.gridy = 2; gbc.gridwidth = 1; gbc.anchor = GridBagConstraints.WEST; paramPanel.add(new JLabel("盘大小:"), gbc); gbc.gridx = 1; gbc.anchor = GridBagConstraints.CENTER; JTextField plateSizeJtf = new JTextField(20); paramPanel.add(plateSizeJtf, gbc); JPanel modePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); modePanel.add(new JLabel("模式选择:")); String[] modes = {"图片", "word", "pdf"}; JComboBox modeComboBox = new JComboBox<>(modes); modePanel.add(modeComboBox); gbc.gridx = 0; gbc.gridy = 3; gbc.gridwidth = 2; gbc.anchor = GridBagConstraints.WEST; paramPanel.add(modePanel, gbc); gbc.gridx = 0; gbc.gridy = 4; gbc.gridwidth = 2; gbc.anchor = GridBagConstraints.CENTER; JButton jButton = new JButton("保存设置"); paramPanel.add(jButton, gbc); //添加事件 jButton.addActionListener(e -> { //宗名 System.out.println(zongPreJtf.getText()); //模式 String selectedValue = (String) modeComboBox.getSelectedItem(); System.out.println(selectedValue); //a3 图片大小 System.out.println(a3LongJtf.getText()); System.out.println(a3WidthJtf.getText()); //盘大小 String text = plateSizeJtf.getText(); System.out.println(text); Map keyvalue = new HashMap<>(); keyvalue.put("zong.name.prefix",zongPreJtf.getText()); keyvalue.put("file.mode",selectedValue); keyvalue.put("a3.length",a3LongJtf.getText()); keyvalue.put("a3.width",a3WidthJtf.getText()); keyvalue.put("plate.size",plateSizeJtf.getText()); try { Config.updateConfig(keyvalue); } catch (IOException ex) { throw new RuntimeException(ex); } }); // 分盘工具标签页 JPanel splitPanel = new JPanel(new BorderLayout()); JPanel leftPanel = new JPanel(new GridBagLayout()); GridBagConstraints leftGbc = new GridBagConstraints(); leftGbc.insets = new Insets(5, 5, 5, 5); leftGbc.gridx = 0; leftGbc.gridy = 0; leftPanel.add(new JLabel("分盘目录:"), leftGbc); JTextField folderField = new JTextField(20); leftGbc.gridx = 1; leftGbc.gridwidth = 1; leftPanel.add(folderField, leftGbc); JButton folderChooserButton = new JButton("选择文件夹"); folderChooserButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); folderField.setText(selectedFile.getAbsolutePath()); } } }); leftGbc.gridx = 2; leftPanel.add(folderChooserButton, leftGbc); leftGbc.gridx = 0; leftGbc.gridy = 1; leftPanel.add(new JLabel("保存路径:"), leftGbc); JTextField savePathField = new JTextField(20); leftGbc.gridx = 1; leftPanel.add(savePathField, leftGbc); JButton savePathChooserButton = new JButton("选择文件夹"); savePathChooserButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); savePathField.setText(selectedFile.getAbsolutePath()); } } }); leftGbc.gridx = 2; leftPanel.add(savePathChooserButton, leftGbc); leftGbc.gridx = 0; leftGbc.gridy = 2; leftGbc.gridwidth = 2; leftGbc.anchor = GridBagConstraints.CENTER; JButton fenpanJbtn = new JButton("开始分盘"); leftPanel.add(fenpanJbtn, leftGbc); JTextArea logTextArea = new JTextArea(); JScrollPane logScrollPane = new JScrollPane(logTextArea); logScrollPane.setPreferredSize(new Dimension(200, 200)); JPanel rightPanel = new JPanel(new BorderLayout()); rightPanel.add(logScrollPane, BorderLayout.CENTER); fenpanJbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 在EDT上执行更新操作 SwingUtilities.invokeLater(new Runnable() { @Override public void run() { logTextArea.append(df.format(new Date())+": 开始分盘。。。"+ "\n"); } }); // 启动一个异步任务 Thread workerThread = new Thread(() -> { // 执行长时间运行的业务操作 // 模拟耗时操作 String saveUrl = savePathField.getText(); String readUrl = folderField.getText(); new FenpanService().fenpan(saveUrl,readUrl); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // 在EDT上更新UI logTextArea.append(df.format(new Date())+": 分盘结束。。。"+ "\n"); } }); }); workerThread.start(); // 启动线程 } }); splitPanel.add(leftPanel, BorderLayout.WEST); splitPanel.add(rightPanel, BorderLayout.CENTER); tabbedPane.addTab("参数设置", paramPanel); tabbedPane.addTab("分盘工具", splitPanel); tabbedPane.addTab("索引工具", createIndexPanel()); frame.add(tabbedPane); frame.setVisible(true); //加载数据 zongPreJtf.setText(Config.getParam("zong.name.prefix")); a3LongJtf.setText(Config.getParam("a3.length")); a3WidthJtf.setText(Config.getParam("a3.width")); plateSizeJtf.setText(Config.getParam("plate.size")); } private static JPanel createIndexPanel() { JPanel indexPanel = new JPanel(new BorderLayout()); JPanel leftIndexPanel = new JPanel(new GridBagLayout()); GridBagConstraints leftIndexGbc = new GridBagConstraints(); leftIndexGbc.insets = new Insets(5, 5, 5, 5); leftIndexGbc.gridx = 0; leftIndexGbc.gridy = 0; leftIndexGbc.anchor = GridBagConstraints.WEST; leftIndexPanel.add(new JLabel("文件路径选择:"), leftIndexGbc); JTextField filePathField = new JTextField(20); leftIndexGbc.gridx = 1; leftIndexGbc.gridwidth = 1; leftIndexPanel.add(filePathField, leftIndexGbc); JButton fileChooserButton = new JButton("选择文件"); leftIndexGbc.gridx = 2; leftIndexPanel.add(fileChooserButton, leftIndexGbc); // 文件选择按钮的动作监听器,打开文件选择对话框 fileChooserButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); filePathField.setText(selectedFile.getAbsolutePath()); } } }); leftIndexGbc.gridx = 0; leftIndexGbc.gridy = 1; leftIndexGbc.anchor = GridBagConstraints.WEST; leftIndexPanel.add(new JLabel("图片dpi:"), leftIndexGbc); leftIndexGbc.gridx = 1; JTextField dpiField = new JTextField(5); leftIndexPanel.add(dpiField, leftIndexGbc); // ... 其他标签左对齐,与前面的代码相同 ... leftIndexGbc.gridx = 0; leftIndexGbc.gridy = 2; leftIndexGbc.gridwidth = 2; leftIndexGbc.anchor = GridBagConstraints.CENTER; JButton jButton = new JButton("开始生成索引"); leftIndexPanel.add(jButton, leftIndexGbc); JTextArea indexLogTextArea = new JTextArea(); JScrollPane indexLogScrollPane = new JScrollPane(indexLogTextArea); indexLogScrollPane.setPreferredSize(new Dimension(200, 200)); JPanel rightIndexPanel = new JPanel(new BorderLayout()); rightIndexPanel.add(indexLogScrollPane, BorderLayout.CENTER); indexPanel.add(leftIndexPanel, BorderLayout.WEST); indexPanel.add(rightIndexPanel, BorderLayout.CENTER); jButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 在EDT上执行更新操作 SwingUtilities.invokeLater(new Runnable() { @Override public void run() { indexLogTextArea.append(df.format(new Date())+": 索引开始。。。"+ "\n"); } }); // 启动一个异步任务 Thread workerThread = new Thread(() -> { // 执行长时间运行的业务操作 // 模拟耗时操作 new SuoyinService().index(filePathField.getText()); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // 在EDT上更新UI indexLogTextArea.append(df.format(new Date())+": 索引结束。。。"+ "\n"); } }); }); workerThread.start(); // 启动线程 } }); return indexPanel; } }