From 0310d046aa407e363d6787cb823b3075fea14588 Mon Sep 17 00:00:00 2001 From: tzdwindows 7 <3076584115@qq.com> Date: Sun, 2 Mar 2025 20:53:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(gui):=20=E6=B7=BB=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20LoginWindow=20=E7=B1=BB=E5=AE=9E=E7=8E=B0=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=95=8C=E9=9D=A2=20-=20=E5=9C=A8=E4=B8=BB=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=90=AF=E5=8A=A8=E6=97=B6=E6=98=BE=E7=A4=BA=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=AA=97=E5=8F=A3=20-=20=E5=AE=9E=E7=8E=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=B3=A8=E5=86=8C=E5=92=8C=E5=AF=86=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E5=8A=9F=E8=83=BD=20-=20=E6=B7=BB=E5=8A=A0=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E9=AA=8C=E8=AF=81=E5=92=8C=E7=94=A8=E6=88=B7=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E7=9B=B8=E5=85=B3=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../innovators/box/AxisInnovatorsBox.java | 6 + .../java/com/axis/innovators/box/Main.java | 2 + .../axis/innovators/box/gui/FridaWindow.java | 2 + .../axis/innovators/box/gui/LoginWindow.java | 436 ++++++++++++++++++ .../axis/innovators/box/gui/MainWindow.java | 48 +- .../box/verification/OnlineVerification.java | 25 + .../innovators/box/verification/UserTags.java | 32 ++ .../box/verification/VerificationService.java | 27 ++ 8 files changed, 537 insertions(+), 41 deletions(-) create mode 100644 src/main/java/com/axis/innovators/box/gui/LoginWindow.java create mode 100644 src/main/java/com/axis/innovators/box/verification/OnlineVerification.java create mode 100644 src/main/java/com/axis/innovators/box/verification/UserTags.java create mode 100644 src/main/java/com/axis/innovators/box/verification/VerificationService.java diff --git a/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java b/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java index a75bd18..45be370 100644 --- a/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java +++ b/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java @@ -342,6 +342,7 @@ public class AxisInnovatorsBox { try { //main.initLog4j2(); main.setTopic(); + List> validFiles = ArgsParser.parseArgs(args); for (Map fileInfo : validFiles) { String extension = fileInfo.get("extension"); @@ -355,6 +356,11 @@ public class AxisInnovatorsBox { main.thread = new Thread(() -> { try { + + // 登录窗口 + LoginWindow.createAndShow(); + + // 主任务1:加载插件 logger.info("Loaded plugins Started"); main.progressBarManager.updateMainProgress(++main.completedTasks); diff --git a/src/main/java/com/axis/innovators/box/Main.java b/src/main/java/com/axis/innovators/box/Main.java index cfa3a29..24f02cd 100644 --- a/src/main/java/com/axis/innovators/box/Main.java +++ b/src/main/java/com/axis/innovators/box/Main.java @@ -3,6 +3,7 @@ package com.axis.innovators.box; import com.axis.innovators.box.decompilation.gui.ModernJarViewer; import com.axis.innovators.box.events.GlobalEventBus; import com.axis.innovators.box.events.OpenFileEvents; +import com.axis.innovators.box.gui.LoginWindow; import com.axis.innovators.box.tools.ArgsParser; import com.axis.innovators.box.tools.FolderCleaner; import com.axis.innovators.box.tools.FolderCreator; @@ -42,6 +43,7 @@ public class Main { return; } } + AxisInnovatorsBox.run(args); } } diff --git a/src/main/java/com/axis/innovators/box/gui/FridaWindow.java b/src/main/java/com/axis/innovators/box/gui/FridaWindow.java index d998423..4975575 100644 --- a/src/main/java/com/axis/innovators/box/gui/FridaWindow.java +++ b/src/main/java/com/axis/innovators/box/gui/FridaWindow.java @@ -205,6 +205,8 @@ public class FridaWindow extends WindowsJDialog { styleMenuItem(aboutItem); aboutItem.addActionListener(e -> showAboutDialog()); + helpMenu.add(aboutItem); + menuBar.add(fileMenu); menuBar.add(helpMenu); setJMenuBar(menuBar); diff --git a/src/main/java/com/axis/innovators/box/gui/LoginWindow.java b/src/main/java/com/axis/innovators/box/gui/LoginWindow.java new file mode 100644 index 0000000..25c6714 --- /dev/null +++ b/src/main/java/com/axis/innovators/box/gui/LoginWindow.java @@ -0,0 +1,436 @@ +package com.axis.innovators.box.gui; + +import com.axis.innovators.box.verification.UserTags; +import com.axis.innovators.box.verification.VerificationService; +import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatIntelliJLaf; + +import javax.swing.*; +import javax.swing.border.LineBorder; +import java.awt.*; +import java.util.concurrent.atomic.AtomicReference; + +/** + * 用于登录的主窗口 + * @author tzdwindows 7 + */ +public class LoginWindow { + private static final AtomicReference loginResult = new AtomicReference<>(UserTags.None); + private JDialog dialog; + private JTextField emailField; + private JPasswordField passwordField; + private JCheckBox showPasswordCheckBox; + private static final int FIELD_WIDTH = 300; + private static final int FIELD_HEIGHT = 35; + public static UserTags createAndShow() { + AtomicReference result = new AtomicReference<>(UserTags.None); + try { + SwingUtilities.invokeAndWait(() -> { + LoginWindow loginWindow = new LoginWindow(); + loginWindow.dialog.setVisible(true); + result.set(loginResult.get()); + + if(result.get() == UserTags.None) { + System.exit(0); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + return result.get(); + } + + private LoginWindow() { + setupLookAndFeel(); + createMainDialog(); + buildLoginUI(); + } + + private void setupLookAndFeel() { + try { + UIManager.setLookAndFeel(new FlatDarculaLaf()); + // 自定义输入框样式 + UIManager.put("Component.arc", 12); + UIManager.put("TextComponent.arc", 12); + UIManager.put("Button.arc", 8); + UIManager.put("ProgressBar.arc", 8); + UIManager.put("TextComponent.background", new Color(0x383838)); + UIManager.put("TextField.placeholderForeground", new Color(0x808080)); + } catch (UnsupportedLookAndFeelException e) { + e.printStackTrace(); + } + } + + private void createMainDialog() { + dialog = new JDialog((Frame) null, "AXIS 安全认证", true); + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + dialog.setSize(380, 500); + dialog.setLocationRelativeTo(null); + dialog.setResizable(false); + dialog.setLayout(new BorderLayout()); + } + + private void buildLoginUI() { + JPanel mainPanel = new JPanel(); + mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); + mainPanel.setBorder(BorderFactory.createEmptyBorder(30, 30, 30, 30)); + + JLabel titleLabel = new JLabel("欢迎登录"); + titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 24)); + titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + mainPanel.add(titleLabel); + mainPanel.add(Box.createRigidArea(new Dimension(0, 30))); + + JPanel inputContainer = new JPanel(); + inputContainer.setLayout(new BoxLayout(inputContainer, BoxLayout.Y_AXIS)); + inputContainer.setOpaque(false); + inputContainer.setAlignmentX(Component.CENTER_ALIGNMENT); + + inputContainer.add(createInputField("账号", buildEmailField())); + inputContainer.add(Box.createRigidArea(new Dimension(0, 10))); + + inputContainer.add(createInputField("密码", buildPasswordField())); + + mainPanel.add(inputContainer); + mainPanel.add(Box.createRigidArea(new Dimension(0, 30))); + + JButton loginButton = createLoginButton(); + loginButton.setAlignmentX(Component.CENTER_ALIGNMENT); + mainPanel.add(loginButton); + + JPanel linksPanel = createUtilityLinks(); + linksPanel.setAlignmentX(Component.CENTER_ALIGNMENT); + mainPanel.add(Box.createRigidArea(new Dimension(0, 30))); + mainPanel.add(linksPanel); + + mainPanel.add(Box.createVerticalGlue()); + + dialog.add(mainPanel, BorderLayout.CENTER); + } + + private JComponent buildEmailField() { + emailField = new JTextField(); + customizeTextField(emailField, "请输入邮箱或手机号"); + return emailField; + } + + private JComponent buildPasswordField() { + JPanel passwordPanel = new JPanel(new BorderLayout()); + passwordPanel.setOpaque(false); + passwordPanel.setBorder(new RoundBorder(8, new Color(0x454545))); + + // 密码输入框 + passwordField = new JPasswordField(); + passwordField.setFont(new Font("微软雅黑", Font.PLAIN, 14)); + passwordField.putClientProperty("JTextField.placeholderText", "请输入密码"); + passwordField.setMaximumSize(new Dimension(FIELD_WIDTH, FIELD_HEIGHT)); + passwordField.setPreferredSize(new Dimension(FIELD_WIDTH, FIELD_HEIGHT)); + passwordField.setBorder(BorderFactory.createEmptyBorder(10, 15, 10, 5)); + + passwordPanel.add(passwordField, BorderLayout.CENTER); + + // 显示密码按钮 + JPanel togglePanel = new JPanel(new BorderLayout()); + togglePanel.setOpaque(false); + togglePanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); + + showPasswordCheckBox = new JCheckBox(); + showPasswordCheckBox.setOpaque(false); + showPasswordCheckBox.setPreferredSize(new Dimension(32, 32)); + showPasswordCheckBox.setBackground(new Color(0x46494B)); + showPasswordCheckBox.setIcon(UIManager.getIcon("PasswordView.icon")); + showPasswordCheckBox.setSelectedIcon(UIManager.getIcon("PasswordHide.icon")); + showPasswordCheckBox.addActionListener(e -> togglePasswordVisibility()); + togglePanel.add(showPasswordCheckBox, BorderLayout.CENTER); + + passwordPanel.add(togglePanel, BorderLayout.EAST); + return passwordPanel; + } + + private void customizeTextField(JComponent field, String placeholder) { + field.setPreferredSize(new Dimension(FIELD_WIDTH, FIELD_HEIGHT)); + field.setMaximumSize(new Dimension(FIELD_WIDTH, FIELD_HEIGHT)); + field.putClientProperty("JComponent.roundRect", true); + field.putClientProperty("JTextField.placeholderText", placeholder); + field.setFont(new Font("微软雅黑", Font.PLAIN, 14)); + field.setBorder(BorderFactory.createCompoundBorder( + new RoundBorder(8, new Color(0x454545)), + BorderFactory.createEmptyBorder(10, 15, 10, 15) + )); + } + + private JPanel createInputField(String label, JComponent field) { + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + panel.setOpaque(false); + panel.setMaximumSize(new Dimension(280, 62)); + + JLabel titleLabel = new JLabel(label); + titleLabel.setFont(new Font("微软雅黑", Font.PLAIN, 13)); + titleLabel.setForeground(new Color(0x9E9E9E)); + titleLabel.setAlignmentX(Component.LEFT_ALIGNMENT); + + panel.add(titleLabel); + panel.add(Box.createVerticalStrut(8)); + panel.add(field); + + return panel; + } + + private JButton createLoginButton() { + JButton button = new JButton("立即登录"); + button.setFont(new Font("微软雅黑", Font.BOLD, 14)); + button.setForeground(Color.WHITE); + button.setBackground(new Color(0x2B579A)); + + button.setPreferredSize(new Dimension(285, 40)); + button.setMaximumSize(new Dimension(285, 40)); + + button.setAlignmentX(Component.CENTER_ALIGNMENT); + + button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + button.addActionListener(e -> attemptLogin()); + + // 悬停效果 + button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseEntered(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(0x3C6DB0)); + } + + public void mouseExited(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(0x2B579A)); + } + }); + + return button; + } + + private static class RoundBorder extends LineBorder { + private final int radius; + + public RoundBorder(int radius, Color color) { + super(color, 1); + this.radius = radius; + } + + @Override + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + Graphics2D g2 = (Graphics2D) g.create(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.drawRoundRect(x, y, width-1, height-1, radius, radius); + g2.dispose(); + } + } + + private JPanel createUtilityLinks() { + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + panel.setOpaque(false); + + JButton registerBtn = createTextButton("注册账号", this::showRegister); + JButton forgotBtn = createTextButton("忘记密码", this::showForgotPassword); + + panel.add(Box.createHorizontalGlue()); + panel.add(registerBtn); + panel.add(Box.createHorizontalStrut(15)); + panel.add(forgotBtn); + panel.add(Box.createHorizontalGlue()); + + return panel; + } + + private JButton createTextButton(String text, Runnable action) { + JButton button = new JButton(text); + button.setForeground(new Color(0x8AB4F8)); + button.setFont(new Font("微软雅黑", Font.PLAIN, 12)); + button.setContentAreaFilled(false); + button.setBorderPainted(false); + button.setFocusPainted(false); + button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + button.addActionListener(e -> action.run()); + return button; + } + + private void togglePasswordVisibility() { + if (showPasswordCheckBox.isSelected()) { + passwordField.setEchoChar((char) 0); + } else { + passwordField.setEchoChar('•'); + } + } + + private void attemptLogin() { + String email = emailField.getText().trim(); + String password = new String(passwordField.getPassword()).trim(); + + if (email.isEmpty() || password.isEmpty()) { + showError("请输入完整的登录信息"); + return; + } + + loginResult.set(VerificationService.determineUserType(null)); + dialog.dispose(); + } + + private void showError(String message) { + JOptionPane.showMessageDialog(dialog, message, "验证错误", + JOptionPane.ERROR_MESSAGE); + } + + private void showRegister() { + JDialog registerDialog = new JDialog(dialog, "注册新账号", true); + registerDialog.setSize(380, 500); + registerDialog.setLocationRelativeTo(dialog); + registerDialog.setResizable(false); + registerDialog.setLayout(new BorderLayout()); + + JPanel mainPanel = new JPanel(); + mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); + mainPanel.setBorder(BorderFactory.createEmptyBorder(30, 30, 30, 30)); + + // 标题 + JLabel titleLabel = new JLabel("新用户注册"); + titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 24)); + titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + mainPanel.add(titleLabel); + mainPanel.add(Box.createRigidArea(new Dimension(0, 30))); + + // 输入容器 + JPanel inputContainer = new JPanel(); + inputContainer.setLayout(new BoxLayout(inputContainer, BoxLayout.Y_AXIS)); + inputContainer.setOpaque(false); + + // 用户名 + JTextField usernameField = new JTextField(); + customizeTextField(usernameField, "请输入用户名"); + inputContainer.add(createInputField("用户名", usernameField)); + inputContainer.add(Box.createRigidArea(new Dimension(0, 10))); + + // 邮箱 + JTextField emailField = new JTextField(); + customizeTextField(emailField, "请输入邮箱"); + inputContainer.add(createInputField("邮箱", emailField)); + inputContainer.add(Box.createRigidArea(new Dimension(0, 10))); + + // 密码 + JPasswordField passwordField = new JPasswordField(); + customizeTextField(passwordField, "请输入密码"); + inputContainer.add(createInputField("密码", passwordField)); + inputContainer.add(Box.createRigidArea(new Dimension(0, 10))); + + // 确认密码 + JPasswordField confirmField = new JPasswordField(); + customizeTextField(confirmField, "请再次输入密码"); + inputContainer.add(createInputField("确认密码", confirmField)); + + mainPanel.add(inputContainer); + mainPanel.add(Box.createRigidArea(new Dimension(0, 30))); + + // 注册按钮 + JButton regButton = new JButton("立即注册"); + styleButton(regButton); + regButton.addActionListener(e -> { + String pwd = new String(passwordField.getPassword()); + String confirm = new String(confirmField.getPassword()); + if(!pwd.equals(confirm)) { + JOptionPane.showMessageDialog(registerDialog, "两次输入的密码不一致", "注册错误", + JOptionPane.ERROR_MESSAGE); + return; + } + // 调用验证服务 + boolean success = VerificationService.registerUser( + usernameField.getText(), + emailField.getText(), + pwd + ); + if(success) { + JOptionPane.showMessageDialog(registerDialog, "注册成功,请登录", "注册成功", + JOptionPane.INFORMATION_MESSAGE); + registerDialog.dispose(); + } else { + JOptionPane.showMessageDialog(registerDialog, "注册失败,请检查信息", "注册错误", + JOptionPane.ERROR_MESSAGE); + } + }); + mainPanel.add(regButton); + + // 返回登录链接 + JButton backBtn = createTextButton("返回登录", registerDialog::dispose); + backBtn.setAlignmentX(Component.CENTER_ALIGNMENT); + mainPanel.add(Box.createRigidArea(new Dimension(0, 15))); + mainPanel.add(backBtn); + + registerDialog.add(mainPanel, BorderLayout.CENTER); + registerDialog.setVisible(true); + } + + private void showForgotPassword() { + JDialog forgotDialog = new JDialog(dialog, "找回密码", true); + forgotDialog.setSize(380, 350); + forgotDialog.setLocationRelativeTo(dialog); + forgotDialog.setResizable(false); + forgotDialog.setLayout(new BorderLayout()); + + JPanel mainPanel = new JPanel(); + mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); + mainPanel.setBorder(BorderFactory.createEmptyBorder(30, 30, 30, 30)); + + JLabel titleLabel = new JLabel("找回密码"); + titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 24)); + titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + mainPanel.add(titleLabel); + mainPanel.add(Box.createRigidArea(new Dimension(0, 30))); + + // 邮箱输入 + JTextField emailField = new JTextField(); + customizeTextField(emailField, "请输入注册邮箱"); + mainPanel.add(createInputField("注册邮箱", emailField)); + mainPanel.add(Box.createRigidArea(new Dimension(0, 30))); + + // 提交按钮 + JButton submitBtn = new JButton("发送重置邮件"); + styleButton(submitBtn); + submitBtn.addActionListener(e -> { + if(VerificationService.sendPasswordReset(emailField.getText())) { + JOptionPane.showMessageDialog(forgotDialog, "重置邮件已发送,请查收", "操作成功", + JOptionPane.INFORMATION_MESSAGE); + forgotDialog.dispose(); + } else { + JOptionPane.showMessageDialog(forgotDialog, "邮箱未注册或发送失败", "操作失败", + JOptionPane.ERROR_MESSAGE); + } + }); + mainPanel.add(submitBtn); + + // 返回链接 + JButton backBtn = createTextButton("返回登录", forgotDialog::dispose); + backBtn.setAlignmentX(Component.CENTER_ALIGNMENT); + mainPanel.add(Box.createRigidArea(new Dimension(0, 15))); + mainPanel.add(backBtn); + + forgotDialog.add(mainPanel, BorderLayout.CENTER); + forgotDialog.setVisible(true); + } + + // 通用按钮样式方法 + private void styleButton(JButton button) { + button.setFont(new Font("微软雅黑", Font.BOLD, 14)); + button.setForeground(Color.WHITE); + button.setBackground(new Color(0x2B579A)); + button.setPreferredSize(new Dimension(285, 40)); + button.setMaximumSize(new Dimension(285, 40)); + button.setAlignmentX(Component.CENTER_ALIGNMENT); + button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + // 悬停效果 + button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseEntered(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(0x3C6DB0)); + } + public void mouseExited(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(0x2B579A)); + } + }); + } +} + diff --git a/src/main/java/com/axis/innovators/box/gui/MainWindow.java b/src/main/java/com/axis/innovators/box/gui/MainWindow.java index 7223eb5..719cf1e 100644 --- a/src/main/java/com/axis/innovators/box/gui/MainWindow.java +++ b/src/main/java/com/axis/innovators/box/gui/MainWindow.java @@ -65,43 +65,9 @@ public class MainWindow extends JFrame { getContentPane().setBackground(new Color(0, 0, 0, 0)); - JPanel mainPanel = new JPanel() { - @Override - protected void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - - Color color1 = new Color(235, 241, 250); - Color color2 = new Color(255, 255, 255); - GradientPaint gp = new GradientPaint(0, 0, color1, getWidth(), getHeight(), color2); - g2d.setPaint(gp); - g2d.fillRect(0, 0, getWidth(), getHeight()); - - if (isBackground) { - try { - ImageIcon backgroundImage = LoadIcon.loadIcon("start_page.png", 500); - if (isBlur) { - BufferedImage bufferedImage = toBufferedImage(backgroundImage.getImage()); - BufferedImage blurredImage = applyGaussianBlur(bufferedImage, 5); - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f)); - int x = (getWidth() - blurredImage.getWidth()) / 2; - int y = (getHeight() - blurredImage.getHeight()) / 2; - g2d.drawImage(blurredImage, x, y, this); - } else { - int x = (getWidth() - backgroundImage.getIconWidth()) / 2; - int y = (getHeight() - backgroundImage.getIconHeight()) / 2; - g2d.drawImage(backgroundImage.getImage(), x, y, this); - } - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f)); - } catch (Exception e) { - logger.error("Failed to load background image", e); - } - } - } - }; + JPanel mainPanel = new JPanel(); mainPanel.setOpaque(true); - mainPanel.putClientProperty("FlatLaf.style", "background: null;"); mainPanel.setLayout(new BorderLayout(20, 20)); mainPanel.setBorder(BorderFactory.createEmptyBorder(30, 30, 30, 30)); @@ -211,7 +177,7 @@ public class MainWindow extends JFrame { tabbedPane.setBackground(new Color(0, 0, 0, 0)); tabbedPane.setBorder(null); - tabbedPane.setUI(new CustomTabbedPaneUI()); + //tabbedPane.setUI(new CustomTabbedPaneUI()); for (ToolCategory category : categories) { JPanel toolsPanel = createToolsPanel(category); @@ -223,7 +189,7 @@ public class MainWindow extends JFrame { scrollPane.setOpaque(false); scrollPane.getViewport().setOpaque(false); JScrollBar verticalScrollBar = scrollPane.getVerticalScrollBar(); - verticalScrollBar.setUI(new CustomScrollBarUI()); + //verticalScrollBar.setUI(new CustomScrollBarUI()); verticalScrollBar.setPreferredSize(new Dimension(10, 100)); if (category.getIcon() == null){ @@ -261,7 +227,7 @@ public class MainWindow extends JFrame { // 创建标题 JLabel title = new JLabel(LanguageManager.getLoadedLanguages().getText("mainWindow.title.2")); title.setFont(new Font("微软雅黑", Font.BOLD, 28)); - title.setForeground(new Color(44, 62, 80)); + title.setForeground(new Color(255, 255, 255)); JButton settings = new JButton(LoadIcon.loadIcon("settings.png", 32)); settings.putClientProperty(FlatClientProperties.BUTTON_TYPE, FlatClientProperties.BUTTON_TYPE_BORDERLESS); @@ -349,7 +315,7 @@ public class MainWindow extends JFrame { card.setPreferredSize(new Dimension(200, 150)); card.setMinimumSize(new Dimension(100, 75)); card.setLayout(new BorderLayout(15, 15)); - card.setBackground(CARD_COLOR); + //card.setBackground(CARD_COLOR); card.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(new Color(225, 229, 234), 1), BorderFactory.createEmptyBorder(20, 20, 20, 20) @@ -371,12 +337,12 @@ public class MainWindow extends JFrame { JLabel titleLabel = new JLabel(tool.getTitle()); titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 18)); - titleLabel.setForeground(new Color(44, 62, 80)); + titleLabel.setForeground(new Color(255, 255, 255)); titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); JTextArea descArea = new JTextArea(tool.getDescription()); descArea.setFont(new Font("微软雅黑", Font.PLAIN, 14)); - descArea.setForeground(new Color(127, 140, 153)); + descArea.setForeground(new Color(177, 177, 177)); descArea.setLineWrap(true); descArea.setWrapStyleWord(true); descArea.setEditable(false); diff --git a/src/main/java/com/axis/innovators/box/verification/OnlineVerification.java b/src/main/java/com/axis/innovators/box/verification/OnlineVerification.java new file mode 100644 index 0000000..ef20f91 --- /dev/null +++ b/src/main/java/com/axis/innovators/box/verification/OnlineVerification.java @@ -0,0 +1,25 @@ +package com.axis.innovators.box.verification; + +import java.util.UUID; + +/** + * 在线验证用户身份 + * @author tzdwindows 7 + */ +public class OnlineVerification { + public String onlineVerification; + public UserTags userTags; + + public OnlineVerification(){ + + } + + OnlineVerification(String onlineVerification, UserTags userTags){ + this.onlineVerification = onlineVerification; + this.userTags = userTags; + } + + public OnlineVerification validateLogin(String identifier, String password){ + return new OnlineVerification(identifier, UserTags.RegularUsers); + } +} diff --git a/src/main/java/com/axis/innovators/box/verification/UserTags.java b/src/main/java/com/axis/innovators/box/verification/UserTags.java new file mode 100644 index 0000000..55f966c --- /dev/null +++ b/src/main/java/com/axis/innovators/box/verification/UserTags.java @@ -0,0 +1,32 @@ +package com.axis.innovators.box.verification; + +/** + * 用户标签组 + * @author tzdwindows 7 + */ +public enum UserTags { + /** + * 没有登录的标签 + */ + None, + /** + * 普通用户标签 + */ + RegularUsers, + /** + * 管理员标签 + */ + AdminUsers, + /** + * VIP用户标签 + */ + VipUsers, + /** + * SVip用户标签 + */ + SVipUsers, + /** + * 企业用户标签 + */ + EnterpriseUsers +} diff --git a/src/main/java/com/axis/innovators/box/verification/VerificationService.java b/src/main/java/com/axis/innovators/box/verification/VerificationService.java new file mode 100644 index 0000000..1eceeac --- /dev/null +++ b/src/main/java/com/axis/innovators/box/verification/VerificationService.java @@ -0,0 +1,27 @@ +package com.axis.innovators.box.verification; + +/** + * @author tzdwindows 7 + */ +public class VerificationService { + public static OnlineVerification validateLogin(String identifier, String password) { + return null; + } + + public static UserTags determineUserType(OnlineVerification identifier) { + return UserTags.RegularUsers; + } + + /** + * 发送密码重置链接给用户 + * @param text + * @return + */ + public static boolean sendPasswordReset(String text) { + return true; + } + + public static boolean registerUser(String text, String text1, String pwd) { + return true; + } +}