张世豪
21 小时以前 03b0fb0ba2de86bcfff277778826547c0e37a93f
src/xitongshezhi/canshushezhi.java
@@ -17,12 +17,14 @@
    private static final int SCREEN_WIDTH = 600;
    private static final int SCREEN_HEIGHT = 1024;
    
    // 颜色常量 - 使用不透明颜色
    // 颜色定义 - 使用mimaguanli.java中的颜色方案
    private static final Color BACKGROUND_COLOR = new Color(15, 28, 48);
    private static final Color CARD_COLOR = new Color(26, 43, 68);
    private static final Color PRIMARY_COLOR = new Color(52, 152, 219);
    private static final Color SECONDARY_COLOR = new Color(46, 204, 113);
    private static final Color DARK_COLOR = new Color(15, 28, 48);
    private static final Color DARK_LIGHT_COLOR = new Color(26, 43, 68);
    private static final Color TEXT_COLOR = new Color(224, 224, 224);
    private static final Color TEXT_LIGHT_COLOR = new Color(160, 200, 255);
    private static final Color FIELD_BACKGROUND = new Color(240, 240, 240);
    
    // UI组件
    private JPanel mainPanel;
@@ -58,10 +60,10 @@
            e.printStackTrace();
        }
        
        // 创建主面板 - 不透明背景
        // 创建主面板 - 使用mimaguanli的背景色
        mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());
        mainPanel.setBackground(DARK_COLOR);
        mainPanel.setBackground(BACKGROUND_COLOR);
        mainPanel.setOpaque(true);
        mainPanel.setBorder(new EmptyBorder(12, 12, 12, 12));
        
@@ -82,14 +84,18 @@
        titleLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 22));
        titleLabel.setForeground(TEXT_COLOR);
        
        // 关闭按钮
        // 关闭按钮 - 使用mimaguanli的按钮样式
        JButton backButton = new JButton("关闭");
        backButton.setFont(new Font("Microsoft YaHei", Font.PLAIN, 14));
        backButton.setBackground(PRIMARY_COLOR);
        backButton.setForeground(Color.WHITE);
        backButton.setOpaque(true);
        backButton.setFocusPainted(false);
        backButton.setBorder(BorderFactory.createEmptyBorder(8, 16, 8, 16));
        backButton.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(40, 120, 180), 1),
            BorderFactory.createEmptyBorder(8, 16, 8, 16)
        ));
        backButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        backButton.addActionListener(e -> dispose());
        
        // 关闭按钮悬停效果
@@ -130,12 +136,14 @@
        scrollPane.setOpaque(false);
        scrollPane.getViewport().setOpaque(false);
        
        // 基本参数设置卡片
        settingsPanel.add(createBasicSettingsCard());
        settingsPanel.add(Box.createRigidArea(new Dimension(0, 12)));
        // 自定义滚动条
        JScrollBar verticalScrollBar = scrollPane.getVerticalScrollBar();
        verticalScrollBar.setBackground(CARD_COLOR);
        verticalScrollBar.setForeground(PRIMARY_COLOR);
        verticalScrollBar.setUnitIncrement(20);
        
        // 设备参数设置卡片
        settingsPanel.add(createDeviceSettingsCard());
        // 合并的参数设置卡片
        settingsPanel.add(createMergedSettingsCard());
        settingsPanel.add(Box.createRigidArea(new Dimension(0, 12)));
        
        // 保存按钮
@@ -148,172 +156,148 @@
        return container;
    }
    
    private JPanel createBasicSettingsCard() {
    private JPanel createMergedSettingsCard() {
        JPanel card = new JPanel();
        card.setLayout(new BorderLayout());
        card.setBackground(DARK_LIGHT_COLOR);
        card.setBackground(CARD_COLOR);
        card.setOpaque(true);
        card.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(52, 152, 219, 128)),
            BorderFactory.createEmptyBorder(15, 15, 15, 15)
            BorderFactory.createLineBorder(new Color(52, 152, 219, 100), 1),
            BorderFactory.createEmptyBorder(20, 20, 20, 20)
        ));
        
        // 卡头
        JPanel cardHeader = new JPanel(new BorderLayout());
        cardHeader.setOpaque(false);
        JLabel titleLabel = new JLabel("基本参数设置");
        titleLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 16));
        titleLabel.setForeground(TEXT_COLOR);
        cardHeader.add(titleLabel, BorderLayout.WEST);
        card.add(cardHeader, BorderLayout.NORTH);
        // 表单内容 - 使用网格布局实现标签在左,文本框在右
        // 调整行高为80像素,为60像素高的组件提供足够的间距
        JPanel formPanel = new JPanel(new GridLayout(3, 2, 10, 20));
        // 表单内容 - 使用水平布局实现标签在左,文本框在右
        JPanel formPanel = new JPanel();
        formPanel.setLayout(new BoxLayout(formPanel, BoxLayout.Y_AXIS));
        formPanel.setOpaque(false);
        formPanel.setBorder(new EmptyBorder(15, 0, 0, 0));
        
        // 发卡机编号
        JLabel deviceIdLabel = new JLabel("发卡机编号:");
        deviceIdLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 13));
        deviceIdLabel.setForeground(TEXT_COLOR);
        formPanel.add(deviceIdLabel);
        deviceIdField = new JTextField();
        styleFormField(deviceIdField);
        formPanel.add(deviceIdField);
        formPanel.add(createHorizontalField("发卡机编号:", deviceIdField = new JTextField()));
        formPanel.add(Box.createRigidArea(new Dimension(0, 18)));
        
        // 服务器地址
        JLabel serverAddressLabel = new JLabel("服务器地址:");
        serverAddressLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 13));
        serverAddressLabel.setForeground(TEXT_COLOR);
        formPanel.add(serverAddressLabel);
        serverAddressField = new JTextField();
        styleFormField(serverAddressField);
        formPanel.add(serverAddressField);
        formPanel.add(createHorizontalField("服务器地址:", serverAddressField = new JTextField()));
        formPanel.add(Box.createRigidArea(new Dimension(0, 18)));
        
        // 服务器端口
        JLabel serverPortLabel = new JLabel("服务器端口:");
        serverPortLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 13));
        serverPortLabel.setForeground(TEXT_COLOR);
        formPanel.add(serverPortLabel);
        formPanel.add(createHorizontalField("服务器端口:", serverPortField = new JTextField()));
        formPanel.add(Box.createRigidArea(new Dimension(0, 18)));
        
        serverPortField = new JTextField();
        styleFormField(serverPortField);
        formPanel.add(serverPortField);
        // 卡槽总数
        formPanel.add(createHorizontalField("卡槽总数:", slotCountField = new JTextField()));
        formPanel.add(Box.createRigidArea(new Dimension(0, 18)));
        // 读卡号模式
        formPanel.add(createHorizontalComboBoxField("读卡号模式:", readModeComboBox = new JComboBox<>(new String[]{"主动模式", "被动模式"})));
        
        card.add(formPanel, BorderLayout.CENTER);
        
        return card;
    }
    
    private JPanel createDeviceSettingsCard() {
        JPanel card = new JPanel();
        card.setLayout(new BorderLayout());
        card.setBackground(DARK_LIGHT_COLOR);
        card.setOpaque(true);
        card.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(52, 152, 219, 128)),
            BorderFactory.createEmptyBorder(15, 15, 15, 15)
    private JPanel createHorizontalField(String labelText, JTextField textField) {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBackground(CARD_COLOR);
        panel.setMaximumSize(new Dimension(SCREEN_WIDTH - 100, 50));
        // 标签
        JLabel label = new JLabel(labelText);
        label.setFont(new Font("Microsoft YaHei", Font.BOLD, 14));
        label.setForeground(TEXT_COLOR);
        label.setPreferredSize(new Dimension(100, 30));
        // 文本框样式 - 使用mimaguanli的样式
        textField.setBackground(FIELD_BACKGROUND);
        textField.setForeground(Color.BLACK);
        textField.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(200, 200, 200), 1),
            BorderFactory.createEmptyBorder(10, 12, 10, 12)
        ));
        textField.setFont(new Font("Microsoft YaHei", Font.PLAIN, 14));
        textField.setOpaque(true);
        textField.setPreferredSize(new Dimension(280, 42));
        
        // 卡头
        JPanel cardHeader = new JPanel(new BorderLayout());
        cardHeader.setOpaque(false);
        // 创建水平布局容器
        JPanel horizontalPanel = new JPanel(new BorderLayout());
        horizontalPanel.setBackground(CARD_COLOR);
        horizontalPanel.setMaximumSize(new Dimension(SCREEN_WIDTH - 100, 50));
        
        JLabel titleLabel = new JLabel("设备参数设置");
        titleLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 16));
        titleLabel.setForeground(TEXT_COLOR);
        horizontalPanel.add(label, BorderLayout.WEST);
        horizontalPanel.add(textField, BorderLayout.CENTER);
        
        cardHeader.add(titleLabel, BorderLayout.WEST);
        card.add(cardHeader, BorderLayout.NORTH);
        // 添加间距
        horizontalPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0));
        
        // 表单内容 - 使用网格布局实现标签在左,输入组件在右
        // 调整行高为80像素,为60像素高的组件提供足够的间距
        JPanel formPanel = new JPanel(new GridLayout(2, 2, 10, 20));
        formPanel.setOpaque(false);
        formPanel.setBorder(new EmptyBorder(15, 0, 0, 0));
        return horizontalPanel;
    }
    private JPanel createHorizontalComboBoxField(String labelText, JComboBox<String> comboBox) {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBackground(CARD_COLOR);
        panel.setMaximumSize(new Dimension(SCREEN_WIDTH - 100, 50));
        
        // 卡槽总数
        JLabel slotCountLabel = new JLabel("卡槽总数:");
        slotCountLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 13));
        slotCountLabel.setForeground(TEXT_COLOR);
        formPanel.add(slotCountLabel);
        // 标签
        JLabel label = new JLabel(labelText);
        label.setFont(new Font("Microsoft YaHei", Font.BOLD, 14));
        label.setForeground(TEXT_COLOR);
        label.setPreferredSize(new Dimension(100, 30));
        
        slotCountField = new JTextField();
        styleFormField(slotCountField);
        formPanel.add(slotCountField);
        // 组合框样式 - 使用mimaguanli的样式
        comboBox.setBackground(FIELD_BACKGROUND);
        comboBox.setForeground(Color.BLACK);
        comboBox.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(200, 200, 200), 1),
            BorderFactory.createEmptyBorder(10, 12, 10, 12)
        ));
        comboBox.setFont(new Font("Microsoft YaHei", Font.PLAIN, 14));
        comboBox.setOpaque(true);
        comboBox.setPreferredSize(new Dimension(280, 42));
        
        // 读卡号模式
        JLabel readModeLabel = new JLabel("读卡号模式:");
        readModeLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 13));
        readModeLabel.setForeground(TEXT_COLOR);
        formPanel.add(readModeLabel);
        // 创建水平布局容器
        JPanel horizontalPanel = new JPanel(new BorderLayout());
        horizontalPanel.setBackground(CARD_COLOR);
        horizontalPanel.setMaximumSize(new Dimension(SCREEN_WIDTH - 100, 50));
        
        readModeComboBox = new JComboBox<>(new String[]{"主动模式", "被动模式"});
        styleComboBox(readModeComboBox);
        formPanel.add(readModeComboBox);
        horizontalPanel.add(label, BorderLayout.WEST);
        horizontalPanel.add(comboBox, BorderLayout.CENTER);
        
        card.add(formPanel, BorderLayout.CENTER);
        // 添加间距
        horizontalPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0));
        
        return card;
        return horizontalPanel;
    }
    
    private JPanel createSaveButton() {
        JPanel buttonPanel = new JPanel(new BorderLayout());
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        buttonPanel.setOpaque(false);
        buttonPanel.setBorder(new EmptyBorder(10, 0, 0, 0));
        
        JButton saveButton = new JButton("保存所有设置");
        saveButton.setFont(new Font("Microsoft YaHei", Font.BOLD, 16));
        saveButton.setBackground(SECONDARY_COLOR);
        saveButton.setFont(new Font("Microsoft YaHei", Font.PLAIN, 14));
        saveButton.setBackground(PRIMARY_COLOR);
        saveButton.setForeground(Color.WHITE);
        saveButton.setOpaque(true);
        saveButton.setFocusPainted(false);
        saveButton.setPreferredSize(new Dimension(0, 60)); // 高度改为60像素
        saveButton.setBorder(BorderFactory.createEmptyBorder(12, 20, 12, 20));
        saveButton.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(40, 120, 180), 1),
            BorderFactory.createEmptyBorder(8, 16, 8, 16)
        ));
        saveButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        saveButton.addActionListener(e -> saveSettings());
        
        // 按钮悬停效果
        saveButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                saveButton.setBackground(brighterColor(SECONDARY_COLOR));
                saveButton.setBackground(brighterColor(PRIMARY_COLOR));
            }
            
            public void mouseExited(java.awt.event.MouseEvent evt) {
                saveButton.setBackground(SECONDARY_COLOR);
                saveButton.setBackground(PRIMARY_COLOR);
            }
        });
        
        buttonPanel.add(saveButton, BorderLayout.CENTER);
        buttonPanel.add(saveButton);
        return buttonPanel;
    }
    private void styleFormField(JTextField field) {
        field.setPreferredSize(new Dimension(200, 60)); // 高度改为60像素
        field.setBackground(Color.WHITE); // 不透明白色背景
        field.setForeground(Color.BLACK); // 黑色文字
        field.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(200, 200, 200)),
            BorderFactory.createEmptyBorder(8, 12, 8, 12)
        ));
        field.setFont(new Font("Microsoft YaHei", Font.PLAIN, 13));
        field.setCaretColor(Color.BLACK);
        field.setOpaque(true); // 确保不透明
    }
    private void styleComboBox(JComboBox<String> comboBox) {
        comboBox.setPreferredSize(new Dimension(200, 60)); // 高度改为60像素
        comboBox.setBackground(Color.WHITE); // 不透明白色背景
        comboBox.setForeground(Color.BLACK); // 黑色文字
        comboBox.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(new Color(200, 200, 200)),
            BorderFactory.createEmptyBorder(8, 12, 8, 12)
        ));
        comboBox.setFont(new Font("Microsoft YaHei", Font.PLAIN, 13));
        comboBox.setOpaque(true); // 确保不透明
    }
    
    private void initializeData() {