From ab07169283fa921fda278c07fdd8c6a6628b07ed Mon Sep 17 00:00:00 2001 From: lixl1 Date: Wed, 27 Apr 2022 17:05:02 +0800 Subject: [PATCH] =?UTF-8?q?javaswing=E7=B3=BB=E7=BB=9F=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/insigma/HyToolApplication.java | 10 +- src/main/java/com/insigma/ui/SwingFrame.java | 642 ++++++++++-------- src/main/java/com/insigma/ui/favicon.jpg | Bin 0 -> 16568 bytes 3 files changed, 347 insertions(+), 305 deletions(-) create mode 100644 src/main/java/com/insigma/ui/favicon.jpg diff --git a/src/main/java/com/insigma/HyToolApplication.java b/src/main/java/com/insigma/HyToolApplication.java index 2cacdc5..6d2a094 100644 --- a/src/main/java/com/insigma/HyToolApplication.java +++ b/src/main/java/com/insigma/HyToolApplication.java @@ -3,6 +3,7 @@ package com.insigma; import cn.hutool.db.Session; import com.insigma.config.AppCfg; import com.insigma.demos.SwingSet2; +import com.insigma.ui.SwingFrame; import com.insigma.utils.DbUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; @@ -42,10 +43,11 @@ public class HyToolApplication { AppCfg.is32Bit = AppCfg.OSArch.equals(propertiesValue); AppCfg.BROWSER = loadProperties.getProperty("hy.browser"); - SwingUtilities.invokeLater(() -> { - log.info("正在启动GUI =======================>>> 成功!"); - SwingSet2.main(args); - }); + // SwingUtilities.invokeLater(() -> { + // log.info("正在启动GUI =======================>>> 成功!"); + // SwingSet2.main(args); + // }); + SwingFrame.run(); Session session = DbUtil.getSession(url, usr, pwd, drive); log.info("获取{}连接,进行操作!", session); session.close(); diff --git a/src/main/java/com/insigma/ui/SwingFrame.java b/src/main/java/com/insigma/ui/SwingFrame.java index aec94c6..ebb1411 100644 --- a/src/main/java/com/insigma/ui/SwingFrame.java +++ b/src/main/java/com/insigma/ui/SwingFrame.java @@ -1,98 +1,104 @@ package com.insigma.ui; +import com.insigma.service.impl.WindowsTomcatMysql; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import java.awt.EventQueue; - -import javax.swing.JFrame; -import javax.swing.JPanel; +import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.JButton; -import java.awt.Panel; -import javax.swing.JTabbedPane; -import java.awt.Font; - -import javax.swing.JTextField; -import java.awt.Color; -import java.awt.Desktop; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JScrollPane; -import javax.swing.JSeparator; -import javax.swing.UIManager; -import javax.swing.ImageIcon; +import java.awt.*; +import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.io.File; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; -import java.awt.event.ActionEvent; -import javax.swing.JCheckBox; -import javax.swing.JProgressBar; -import javax.swing.Timer; -import javax.swing.JTextPane; -import java.awt.Component; -/** - * @author BeiJing-GWY - */ -@Slf4j -public class SwingFrame extends JFrame implements ActionListener { + +import java.awt.EventQueue; + import javax.swing.JFrame; + import javax.swing.JPanel; + import javax.swing.border.EmptyBorder; + import javax.swing.event.ChangeEvent; + import javax.swing.event.ChangeListener; + import javax.swing.JButton; + import java.awt.Panel; + import java.awt.Toolkit; + + import javax.swing.JTabbedPane; + import java.awt.Font; + import javax.swing.JTextField; + import java.awt.Color; + import java.awt.Desktop; + import javax.swing.JLabel; + import javax.swing.JScrollPane; + import javax.swing.JSeparator; + import javax.swing.UIManager; + import javax.swing.ImageIcon; + import java.awt.event.ActionListener; + import java.awt.event.MouseAdapter; + import java.awt.event.MouseEvent; + import java.io.IOException; + import java.net.URI; + import java.net.URISyntaxException; + import java.awt.event.ActionEvent; + import javax.swing.JCheckBox; + import javax.swing.JFileChooser; + import javax.swing.JProgressBar; + import javax.swing.Timer; + import javax.swing.JTextPane; +import javax.swing.filechooser.FileFilter; +import java.awt.Component; /** - * + * @author BeiJing-GWY */ + @Slf4j +public class SwingFrame extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JPanel contentPane; - private JTextField textField; - private JTextField textField_1; - private JTextField textField_2; - private JTextField textField_3; - private JTextField textField_4; private final int MIN_PROGRESS = 0; private final int MAX_PROGRESS = 100; private int currentProgress = MIN_PROGRESS; private JTextField textField_5; private JLabel lblNewLabel_6; - - + private JTextField textField; + private JPanel startRepairPanel; + private JPanel repairPanel; + private JPanel backupsPanel; + private JPanel startBackupPanel; + private JPanel startRestorePanel; + private JTabbedPane tabbedPane; /** * Launch the application. */ - public static void main(String[] args) { - - try { - for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { - if ("Nimbus".equals(info.getName())) { - javax.swing.UIManager.setLookAndFeel(info.getClassName()); - break; - } - } - }catch(Exception e) { - log.error("启动发生异常:", e); + public static void run() { +// try { +// for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { +// if ("Nimbus".equals(info.getName())) { +// javax.swing.UIManager.setLookAndFeel(info.getClassName()); +// break; +// } +// } +// }catch(Exception e) { +// System.out.println(e); +// } + try {//设置界面样式 Look And Feel + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { - @Override public void run() { try { SwingFrame frame = new SwingFrame(); frame.setTitle("系统工具"); //设置显示窗口标题 // frame.setSize(1600,400);//设置显示窗口大小 -// frame.getContentPane().setBackground(Color.blue);//设置显示窗体颜色 +// frame.getContentPane().setBackground(Color.blue);//设置显示窗体颜色 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口是否可以关闭 - frame.setBounds(100, 100, 773, 459); + frame.setBounds(100, 100, 910, 580); frame.setVisible(true); - java.net.URL imgURL =SwingFrame.class.getResource("favicon.jpg"); - ImageIcon arrowIcon = null; - if (imgURL != null) { - arrowIcon = new ImageIcon(imgURL); - frame.setIconImage(arrowIcon.getImage()); - } else { - JOptionPane.showMessageDialog(frame, "Icon image not found."); - } + frame.setIconImage(Toolkit.getDefaultToolkit().getImage("D:\\JavaSwing\\src\\main\\java\\com\\insigma\\ui\\favicon.jpg")); } catch (Exception e) { e.printStackTrace(); } @@ -111,12 +117,73 @@ public class SwingFrame extends JFrame implements ActionListener { setContentPane(contentPane); contentPane.setLayout(null); - JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT); - tabbedPane.setBounds(5, 5, 745, 402); + tabbedPane = new JTabbedPane(JTabbedPane.LEFT); + tabbedPane.setBounds(5, 5, 903, 530); tabbedPane.setBackground(Color.WHITE); tabbedPane.setFont(new Font("微软雅黑", Font.PLAIN, 15)); contentPane.add(tabbedPane); + repairPanel = new JPanel();//系统优化面板 + repairPanel.setForeground(Color.GRAY); + repairPanel.setBackground(new Color(220, 220, 220)); + tabbedPane.addTab("系统优化", null, repairPanel, null); + repairPanel.setLayout(null); + + JLabel label_5 = new JLabel("系统优化"); + label_5.setBounds(42, 35, 120, 40); + label_5.setForeground(Color.RED); + label_5.setFont(new Font("微软雅黑", Font.PLAIN, 30)); + repairPanel.add(label_5); + + JButton btnNewButton = new JButton("开始优化"); + btnNewButton.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + btnNewButton.setBounds(617, 63, 113, 40); + btnNewButton.addActionListener(this); + repairPanel.add(btnNewButton); + + JLabel label_6 = new JLabel("通过重启服务、清除缓存等操作可以有效解决大部分系统运行问题。"); + label_6.setBounds(42, 88, 544, 18); + label_6.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + repairPanel.add(label_6); + + JSeparator separator_1 = new JSeparator(); + separator_1.setBackground(Color.LIGHT_GRAY); + separator_1.setBounds(27, 116, 715, 5); + repairPanel.add(separator_1); + + JCheckBox chckbxNewCheckBox = new JCheckBox("重启服务",true); + chckbxNewCheckBox.setBackground(new Color(220, 220, 220)); + chckbxNewCheckBox.setBounds(53, 130, 162, 27); + chckbxNewCheckBox.setFont(new Font("微软雅黑", Font.PLAIN, 18)); + repairPanel.add(chckbxNewCheckBox); + + JLabel lblNewLabel_5 = new JLabel("当系统运行慢时,可操作重启应用进行系统重启Tomcat、MySql。"); + lblNewLabel_5.setBounds(77, 166, 573, 18); + lblNewLabel_5.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + repairPanel.add(lblNewLabel_5); + + JCheckBox checkBox_1 = new JCheckBox("清除缓存",true); + checkBox_1.setBackground(new Color(220, 220, 220)); + checkBox_1.setBounds(53, 205, 253, 27); + checkBox_1.setFont(new Font("微软雅黑", Font.PLAIN, 18)); + repairPanel.add(checkBox_1); + + JLabel label_8 = new JLabel("当系统内存不够,运行缓慢或无法正常升级时,可操作清除缓存和应用缓存。"); + label_8.setBounds(77, 241, 514, 18); + label_8.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + repairPanel.add(label_8); + + JLabel lblNewLabel_2 = new JLabel("临时测试图片"); + lblNewLabel_2.setIcon(new ImageIcon("D:\\icon\\favicon.jpg")); + lblNewLabel_2.setBounds(34, 309, 240, 185); + repairPanel.add(lblNewLabel_2); + + JButton btnNewButton_8 = new JButton("打开服务管理器"); + btnNewButton_8.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + btnNewButton_8.setBounds(582, 132, 148, 40); + btnNewButton_8.addActionListener(this); + repairPanel.add(btnNewButton_8); + JPanel memoryPanel = new JPanel();//调整内存面板 memoryPanel.setBorder(UIManager.getBorder("Button.border")); memoryPanel.setAlignmentX(Component.LEFT_ALIGNMENT); @@ -131,87 +198,80 @@ public class SwingFrame extends JFrame implements ActionListener { lblNewLabel.setFont(new Font("微软雅黑", Font.PLAIN, 30)); memoryPanel.add(lblNewLabel); - JLabel lblNewLabel_1 = new JLabel("根据具体系统运行可设置应用内容、数据库内容的大小。"); + JLabel lblNewLabel_1 = new JLabel("根据具体系统运行情况,可以选择最佳运行状态。"); lblNewLabel_1.setBounds(60, 75, 375, 18); lblNewLabel_1.setFont(new Font("微软雅黑", Font.PLAIN, 15)); memoryPanel.add(lblNewLabel_1); JSeparator separator = new JSeparator(); - separator.setBackground(Color.LIGHT_GRAY); separator.setBounds(60, 106, 531, 5); + separator.setBackground(Color.LIGHT_GRAY); memoryPanel.add(separator); - JLabel lblNewLabel_2 = new JLabel("应用内存"); - lblNewLabel_2.setBounds(60, 124, 80, 18); - lblNewLabel_2.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - memoryPanel.add(lblNewLabel_2); - - JLabel lblNewLabel_3 = new JLabel("非堆区初始内存分配大小"); - lblNewLabel_3.setBackground(new Color(221, 160, 221)); - lblNewLabel_3.setBounds(82, 165, 175, 18); - lblNewLabel_3.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - memoryPanel.add(lblNewLabel_3); - - JLabel label = new JLabel("堆区最大内存分配上限"); - label.setBounds(82, 196, 156, 18); - label.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - memoryPanel.add(label); - - JLabel label_1 = new JLabel("初始内存分配大小"); - label_1.setBounds(82, 227, 156, 18); - label_1.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - memoryPanel.add(label_1); - - JLabel label_2 = new JLabel("最大内存分配上限"); - label_2.setBounds(82, 258, 156, 18); - label_2.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - memoryPanel.add(label_2); - - textField = new JTextField(); - textField.setBounds(255, 163, 86, 24); - memoryPanel.add(textField); - textField.setColumns(10); - - textField_1 = new JTextField(); - textField_1.setBounds(255, 196, 86, 24); - textField_1.setColumns(10); - memoryPanel.add(textField_1); - - textField_2 = new JTextField(); - textField_2.setBounds(255, 227, 86, 24); - textField_2.setColumns(10); - memoryPanel.add(textField_2); - - textField_3 = new JTextField(); - textField_3.setBounds(255, 256, 86, 24); - textField_3.setColumns(10); - memoryPanel.add(textField_3); - - JLabel lblNewLabel_4 = new JLabel("最大可设置到1024MB"); - lblNewLabel_4.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - lblNewLabel_4.setBounds(355, 166, 163, 18); - memoryPanel.add(lblNewLabel_4); - - JLabel label_3 = new JLabel("数据库内存"); - label_3.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - label_3.setBounds(60, 307, 100, 24); - memoryPanel.add(label_3); - - JLabel label_4 = new JLabel("数据库内存大小"); - label_4.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - label_4.setBounds(82, 344, 156, 18); - memoryPanel.add(label_4); - - textField_4 = new JTextField(); - textField_4.setColumns(10); - textField_4.setBounds(255, 342, 86, 24); - memoryPanel.add(textField_4); - - + String strMsgBtn = "高性能内存配置"; + String strMsgBtn1 = "大于16G内存的电脑可调整到高性能配置"; + String msgBtn = "" + strMsgBtn + "
"+strMsgBtn1+""; + JButton btnNewButton_7 = new JButton(msgBtn); + btnNewButton_7.setBounds(72, 138, 329, 59); + btnNewButton_7.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + btnNewButton_7.addActionListener(new ActionListener() { + @SneakyThrows + public void actionPerformed(ActionEvent e) { + new WindowsTomcatMysql().setDbSize(200000); + new WindowsTomcatMysql().setMwSize(200000); + } + }); + memoryPanel.add(btnNewButton_7); + + String strMsgBtn16G = "16G内存配置方案"; + String strMsgBtn16G1 = "大于16G内存的电脑可调整到高性能配置"; + String msgBtn16G = "" + strMsgBtn16G + "
"+strMsgBtn16G1+""; + JButton button_1 = new JButton(msgBtn16G); + button_1.setBounds(72, 227, 329, 59); + button_1.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + button_1.addActionListener(new ActionListener() { + @SneakyThrows + public void actionPerformed(ActionEvent e) { + new WindowsTomcatMysql().setDbSize(160000); + new WindowsTomcatMysql().setMwSize(160000); + } + }); + memoryPanel.add(button_1); + + String strMsgBtn8G = "8G内存配置方案"; + String strMsgBtn8G1 = "大于8G内存的电脑可调整到高性能配置"; + String msgBtn8G = "" + strMsgBtn8G + "
"+strMsgBtn8G1+""; + JButton button_2 = new JButton(msgBtn8G); + button_2.setBounds(72, 314, 329, 59); + button_2.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + button_2.addActionListener(new ActionListener() { + @SneakyThrows + public void actionPerformed(ActionEvent e) { + new WindowsTomcatMysql().setDbSize(80000); + new WindowsTomcatMysql().setMwSize(80000); + } + }); + memoryPanel.add(button_2); + + String strMsgBtn4G = "4G内存配置方案"; + String strMsgBtn4G1 = "大于4G内存的电脑可调整到高性能配置"; + String msgBtn4G = "" + strMsgBtn4G + "
"+strMsgBtn4G1+""; + JButton button_3 = new JButton(msgBtn4G); + button_3.setBounds(72, 399, 329, 59); + button_3.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + button_3.addActionListener(new ActionListener() { + @SneakyThrows + public void actionPerformed(ActionEvent e) { + new WindowsTomcatMysql().setDbSize(40000); + new WindowsTomcatMysql().setMwSize(40000); + } + }); + memoryPanel.add(button_3); JButton btnNewButton_1 = new JButton("保存"); + btnNewButton_1.setBounds(566, 472, 113, 40); btnNewButton_1.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { + //暂定保存内容 } }); // btnNewButton_1.setContentAreaFilled(false);//按钮设置为透明 @@ -223,81 +283,9 @@ public class SwingFrame extends JFrame implements ActionListener { // Image image = ImageIO.read(file); // btnNewButton_1.setIcon(new ImageIcon(image.getScaledInstance(50, 50, image.SCALE_DEFAULT))); btnNewButton_1.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - btnNewButton_1.setBounds(500, 344, 113, 40); memoryPanel.add(btnNewButton_1); - - JPanel repairPanel = new JPanel();//数据修复面板 - repairPanel.setForeground(Color.GRAY); - repairPanel.setBackground(new Color(220, 220, 220)); - tabbedPane.addTab("数据修复", null, repairPanel, null); - repairPanel.setLayout(null); - - JLabel label_5 = new JLabel("系统修复"); - label_5.setBounds(42, 35, 120, 40); - label_5.setForeground(Color.RED); - label_5.setFont(new Font("微软雅黑", Font.PLAIN, 30)); - repairPanel.add(label_5); - - JButton btnNewButton = new JButton("开始修复"); - btnNewButton.setBounds(504, 42, 113, 40); - repairPanel.add(btnNewButton); - - JLabel label_6 = new JLabel("通过数据清洗等操作可以有效解决系统功能异常问题"); - label_6.setBounds(42, 76, 375, 18); - label_6.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - repairPanel.add(label_6); - - JSeparator separator_1 = new JSeparator(); - separator_1.setBackground(Color.LIGHT_GRAY); - separator_1.setBounds(27, 100, 590, 5); - repairPanel.add(separator_1); - - JCheckBox chckbxNewCheckBox = new JCheckBox("修复数据库数据"); - chckbxNewCheckBox.setBackground(new Color(220, 220, 220)); - chckbxNewCheckBox.setBounds(53, 130, 162, 27); - chckbxNewCheckBox.setFont(new Font("微软雅黑", Font.PLAIN, 18)); - repairPanel.add(chckbxNewCheckBox); - - JLabel lblNewLabel_5 = new JLabel("机构信息管理、人员信息管理、数据校核、信息系统查询等。"); - lblNewLabel_5.setBounds(77, 166, 405, 18); - lblNewLabel_5.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - repairPanel.add(lblNewLabel_5); - - JCheckBox checkBox = new JCheckBox("修复系统管理数据"); - checkBox.setBackground(new Color(220, 220, 220)); - checkBox.setBounds(53, 193, 173, 27); - checkBox.setFont(new Font("微软雅黑", Font.PLAIN, 18)); - repairPanel.add(checkBox); - - JLabel label_7 = new JLabel("角色管理、用户管理、日志管理、系统参数配置等。"); - label_7.setBounds(77, 229, 345, 18); - label_7.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - repairPanel.add(label_7); - - JCheckBox checkBox_1 = new JCheckBox("修复统计专用信息管理数据"); - checkBox_1.setBackground(new Color(220, 220, 220)); - checkBox_1.setBounds(53, 256, 253, 27); - checkBox_1.setFont(new Font("微软雅黑", Font.PLAIN, 18)); - repairPanel.add(checkBox_1); - - JLabel label_8 = new JLabel("信息表、校核、使用情况、人员对比等。"); - label_8.setBounds(72, 290, 270, 18); - label_8.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - repairPanel.add(label_8); - - JCheckBox checkBox_2 = new JCheckBox("修复年报统计数据"); - checkBox_2.setBackground(new Color(220, 220, 220)); - checkBox_2.setBounds(53, 331, 253, 27); - checkBox_2.setFont(new Font("微软雅黑", Font.PLAIN, 18)); - repairPanel.add(checkBox_2); - - JLabel label_9 = new JLabel("统计报表、校核、报表说明等。"); - label_9.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - label_9.setBounds(72, 366, 270, 18); - repairPanel.add(label_9); - - Panel backupsPanel = new Panel();//数据库备份面板 + backupsPanel = new JPanel();//数据库备份、还原面板 backupsPanel.setBackground(new Color(220, 220, 220)); tabbedPane.addTab("数据库备份", null, backupsPanel, null); backupsPanel.setLayout(null); @@ -335,12 +323,8 @@ public class SwingFrame extends JFrame implements ActionListener { backupsPanel.add(lblNewLabel_15); JButton btnNewButton_3 = new JButton("数据库备份"); - btnNewButton_3.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - } - }); - btnNewButton_3.setBounds(32, 316, 113, 27); + btnNewButton_3.setBounds(32, 351, 113, 27); + btnNewButton_3.addActionListener(this); backupsPanel.add(btnNewButton_3); JLabel label_11 = new JLabel("数据库还原将覆盖当前系统中所有人为产生的数据,不可恢复,需谨慎操作。
"); @@ -354,12 +338,13 @@ public class SwingFrame extends JFrame implements ActionListener { backupsPanel.add(label_12); JButton button = new JButton("数据库还原"); - button.setBounds(451, 316, 113, 27); + button.setBounds(451, 351, 113, 27); + button.addActionListener(this); backupsPanel.add(button); JLabel lblNewLabel_16 = new JLabel("注:当系统遇到极端情况导致无法登陆时,系统卸载可进行数据库备份,重装或升级之后进行数据库还原。"); - lblNewLabel_16.setFont(new Font("微软雅黑", Font.PLAIN, 13)); - lblNewLabel_16.setBounds(14, 366, 620, 18); + lblNewLabel_16.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + lblNewLabel_16.setBounds(14, 494, 710, 18); backupsPanel.add(lblNewLabel_16); Panel upgradePanel = new Panel();//系统升级面板 @@ -377,7 +362,6 @@ public class SwingFrame extends JFrame implements ActionListener { lblNewLabel_9.setBounds(57, 88, 420, 18); upgradePanel.addMouseListener(new MouseAdapter() { - @Override public void mouseClicked(MouseEvent e){ //鼠标点击事件 @SuppressWarnings("unused") URI uri = null; @@ -400,11 +384,9 @@ public class SwingFrame extends JFrame implements ActionListener { } } - @Override public void mouseEntered(MouseEvent e) { //鼠标移入事件 lblNewLabel_9.setForeground(Color.red); } - @Override public void mouseExited(MouseEvent e) { //鼠标移出事件 lblNewLabel_9.setForeground(Color.blue); } @@ -422,24 +404,21 @@ public class SwingFrame extends JFrame implements ActionListener { lblNewLabel_11.setBounds(57, 202, 278, 18); upgradePanel.add(lblNewLabel_11); - JPanel startRepairPanel = new JPanel(); + startRepairPanel = new JPanel(); startRepairPanel.setBackground(new Color(220, 220, 220)); - tabbedPane.addTab("开始修复界面", null, startRepairPanel, null); startRepairPanel.setLayout(null); - - lblNewLabel_6 = new JLabel("系统正在数据修复中,建议不要随意随意停止!"); + lblNewLabel_6 = new JLabel("系统正在加速优化中,建议不要随意随意操作停止!"); lblNewLabel_6.setBounds(57, 34, 378, 18); lblNewLabel_6.setForeground(new Color(255, 0, 0)); lblNewLabel_6.setFont(new Font("微软雅黑", Font.PLAIN, 18)); startRepairPanel.add(lblNewLabel_6); - - JButton btnNewButton_2 = new JButton("停止修复"); + JButton btnNewButton_2 = new JButton("停止优化"); btnNewButton_2.setBounds(495, 65, 113, 27); startRepairPanel.add(btnNewButton_2); JProgressBar progressBar = new JProgressBar(); -// MyJProgressBar progressBar = new MyJProgressBar(); + // MyJProgressBar progressBar = new MyJProgressBar(); progressBar.setBounds(57, 65, 412, 27); // 设置进度的 最小值 和 最大值 progressBar.setMinimum(MIN_PROGRESS); @@ -452,7 +431,7 @@ public class SwingFrame extends JFrame implements ActionListener { progressBar.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { - log.info("当前进度值: " + progressBar.getValue() + "; " + + System.out.println("当前进度值: " + progressBar.getValue() + "; " + "进度百分比: " + progressBar.getPercentComplete()); } }); @@ -470,101 +449,136 @@ public class SwingFrame extends JFrame implements ActionListener { startRepairPanel.add(lblNewLabel_7); JScrollPane scrollPane = new JScrollPane(); - scrollPane.setBounds(57, 152, 539, 232); + scrollPane.setBounds(57, 152, 539, 338); startRepairPanel.add(scrollPane); - JTextPane textPane = new JTextPane(); scrollPane.setViewportView(textPane); - JPanel panel = new JPanel(); - panel.setBackground(new Color(220, 220, 220)); - tabbedPane.addTab("数据库备份", null, panel, null); + startBackupPanel = new JPanel();//执行数据库备份面板 + startBackupPanel.setBackground(new Color(220, 220, 220)); JButton btnNewButton_4 = new JButton("返回"); - btnNewButton_4.setBounds(14, 13, 113, 27); - btnNewButton_4.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - } - }); - panel.setLayout(null); - panel.add(btnNewButton_4); + btnNewButton_4.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + btnNewButton_4.setBounds(14, 13, 113, 35); + btnNewButton_4.addActionListener(this); + startBackupPanel.setLayout(null); + startBackupPanel.add(btnNewButton_4); JLabel lblNewLabel_17 = new JLabel("数据库备份"); lblNewLabel_17.setBounds(94, 60, 100, 27); lblNewLabel_17.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - panel.add(lblNewLabel_17); + startBackupPanel.add(lblNewLabel_17); JLabel lblNewLabel_18 = new JLabel("存储目录:"); lblNewLabel_18.setBounds(71, 90, 85, 27); lblNewLabel_18.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - panel.add(lblNewLabel_18); + startBackupPanel.add(lblNewLabel_18); JButton btnNewButton_5 = new JButton("更改"); - btnNewButton_5.setBounds(414, 92, 113, 24); - panel.add(btnNewButton_5); + btnNewButton_5.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + btnNewButton_5.setBounds(486, 91, 100, 24); + btnNewButton_5.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser jfC = new JFileChooser(); +// jfC.setMultiSelectionEnabled(true);//文件是否多选!参数为true或false + jfC.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//设置文件的打开模式(只能选文件夹) + jfC.setDialogTitle("请选择要上传的文件夹"); + int value = jfC.showOpenDialog(SwingFrame.this); + if(value == JFileChooser.APPROVE_OPTION) { + File dirFile = jfC.getSelectedFile();//返回选中的文件 + textField_5.setText(dirFile.getAbsolutePath()); + } + } + }); + startBackupPanel.add(btnNewButton_5); JLabel lblNewLabel_19 = new JLabel("数据库备份的格式为“zip”"); lblNewLabel_19.setBounds(170, 120, 186, 18); lblNewLabel_19.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - panel.add(lblNewLabel_19); - - JLabel label_13 = new JLabel("备份内容:"); - label_13.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - label_13.setBounds(71, 140, 85, 27); - panel.add(label_13); - - JLabel label_14 = new JLabel("基础库"); - label_14.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - label_14.setBounds(170, 140, 100, 27); - panel.add(label_14); - - JLabel label_15 = new JLabel("机构信息管理、人员信息管理、数据校核、信息系统查询等。"); - label_15.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - label_15.setBounds(170, 160, 412, 27); - panel.add(label_15); - - JLabel label_16 = new JLabel("系统管理"); - label_16.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - label_16.setBounds(170, 190, 100, 27); - panel.add(label_16); - - JLabel label_17 = new JLabel("角色管理、用户管理、日志管理、系统参数配置等。"); - label_17.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - label_17.setBounds(170, 210, 412, 27); - panel.add(label_17); - - JLabel label_18 = new JLabel("统计专用信息管理"); - label_18.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - label_18.setBounds(170, 240, 167, 27); - panel.add(label_18); - - JLabel label_19 = new JLabel("信息表、校核、使用情况、人员对比等。"); - label_19.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - label_19.setBounds(170, 266, 412, 27); - panel.add(label_19); - - JLabel label_20 = new JLabel("统计年报"); - label_20.setFont(new Font("微软雅黑", Font.PLAIN, 20)); - label_20.setBounds(170, 293, 100, 27); - panel.add(label_20); - - JLabel label_21 = new JLabel("统计报表、校核、报表说明等。"); - label_21.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - label_21.setBounds(170, 318, 412, 27); - panel.add(label_21); + startBackupPanel.add(lblNewLabel_19); JButton btnNewButton_6 = new JButton("开始备份"); - btnNewButton_6.setBounds(206, 357, 113, 27); - panel.add(btnNewButton_6); + btnNewButton_6.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + btnNewButton_6.setBounds(206, 186, 113, 35); + btnNewButton_6.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + } + }); + startBackupPanel.add(btnNewButton_6); - textField_5 = new JTextField("D:\\hzb2022"); + textField_5 = new JTextField(); + textField_5.setBounds(170, 92, 319, 24); textField_5.setFont(new Font("微软雅黑", Font.PLAIN, 15)); - textField_5.setBounds(170, 92, 245, 24); - panel.add(textField_5); + startBackupPanel.add(textField_5); textField_5.setColumns(10); + startRestorePanel = new JPanel(); + startRestorePanel.setLayout(null); + startRestorePanel.setBackground(new Color(220, 220, 220)); + + JButton button_4 = new JButton("返回"); + button_4.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + button_4.setBounds(14, 13, 113, 35); + button_4.addActionListener(this); + startRestorePanel.add(button_4); + + JLabel label = new JLabel("数据库还原"); + label.setFont(new Font("微软雅黑", Font.PLAIN, 20)); + label.setBounds(94, 60, 100, 27); + startRestorePanel.add(label); + + JButton button_5 = new JButton("上传文件:"); + button_5.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + button_5.setBounds(94, 91, 116, 24); + button_5.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser jfC = new JFileChooser(); + jfC.setFileFilter(new FileFilter() { + @Override + public String getDescription() { + return "ZIP压缩文件(*.zip)"; + } + @Override + public boolean accept(File f) { + if(f.getName().toLowerCase().endsWith(".zip")) { + return true; + } + return false; + } + }); +// jfC.setMultiSelectionEnabled(true);//文件是否多选!参数为true或false + jfC.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置文件的打开模式(只能选文件夹) + jfC.setDialogTitle("请选择要上传的文件夹"); + int value = jfC.showOpenDialog(SwingFrame.this); + if(value == JFileChooser.APPROVE_OPTION) { + File dirFile = jfC.getSelectedFile();//返回选中的文件 + textField.setText(dirFile.getAbsolutePath()); + } + } + }); + startRestorePanel.add(button_5); + + JLabel label_2 = new JLabel("数据库备份的格式为“zip”"); + label_2.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + label_2.setBounds(170, 120, 186, 18); + startRestorePanel.add(label_2); + + JButton button_6 = new JButton("开始还原"); + button_6.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + button_6.setBounds(206, 186, 113, 35); + startRestorePanel.add(button_6); + + textField = new JTextField(""); + textField.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + textField.setColumns(10); + textField.setBounds(207, 91, 330, 24); + startRestorePanel.add(textField); + new Timer(500, new ActionListener() { @Override @@ -579,8 +593,34 @@ public class SwingFrame extends JFrame implements ActionListener { }).start(); } - @Override - public void actionPerformed(ActionEvent e) { - - } -} + @Override + public void actionPerformed(ActionEvent e) { + String buttonCommand = e.getActionCommand(); + if(buttonCommand.equals("打开服务管理器")) { + try{ +// Runtime rt = Runtime.getRuntime();runBak +// Process p = rt.exec("cmd.exe /c compmgmt.msc"); + new WindowsTomcatMysql().openServer(); + }catch (Exception ex){ + ex.printStackTrace(); + } + }else if(buttonCommand.equals("开始优化")) { + try{ + tabbedPane.addTab("开始优化界面", null, startRepairPanel, null); + tabbedPane.setSelectedComponent(startRepairPanel); + new WindowsTomcatMysql().startDbService(); + new WindowsTomcatMysql().startDbService(); + }catch (Exception ex){ + ex.printStackTrace(); + } + }else if(buttonCommand.equals("数据库备份")) { + tabbedPane.addTab("数据库备份", null, startBackupPanel, null); + tabbedPane.setSelectedComponent(startBackupPanel); + }else if(buttonCommand.equals("数据库还原")) { + tabbedPane.addTab("数据库还原", null, startRestorePanel, null); + tabbedPane.setSelectedComponent(startRestorePanel); + }else if(buttonCommand.equals("返回")) { + tabbedPane.setSelectedComponent(backupsPanel); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/insigma/ui/favicon.jpg b/src/main/java/com/insigma/ui/favicon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93051ab1bc6979767ff4e83ac527b2e700a81bb8 GIT binary patch literal 16568 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 literal 0 HcmV?d00001