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

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;
}
}