You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
325 lines
12 KiB
Java
325 lines
12 KiB
Java
package com.docus.sw.fenpan;
|
|
|
|
import com.docus.sw.Config;
|
|
|
|
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<String> 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<String,String> 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;
|
|
leftIndexPanel.add(new 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);
|
|
|
|
return indexPanel;
|
|
}
|
|
}
|