| | |
| | | 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; |
| | |
| | | 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)); |
| | | |
| | |
| | | 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()); |
| | | |
| | | // 关闭按钮悬停效果 |
| | |
| | | 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))); |
| | | |
| | | // 保存按钮 |
| | |
| | | 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; |
| | | } |
| | | |
| | | // 卡槽总数 |
| | | JLabel slotCountLabel = new JLabel("卡槽总数:"); |
| | | slotCountLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 13)); |
| | | slotCountLabel.setForeground(TEXT_COLOR); |
| | | formPanel.add(slotCountLabel); |
| | | 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)); |
| | | |
| | | slotCountField = new JTextField(); |
| | | styleFormField(slotCountField); |
| | | formPanel.add(slotCountField); |
| | | // 标签 |
| | | JLabel label = new JLabel(labelText); |
| | | label.setFont(new Font("Microsoft YaHei", Font.BOLD, 14)); |
| | | label.setForeground(TEXT_COLOR); |
| | | label.setPreferredSize(new Dimension(100, 30)); |
| | | |
| | | // 读卡号模式 |
| | | JLabel readModeLabel = new JLabel("读卡号模式:"); |
| | | readModeLabel.setFont(new Font("Microsoft YaHei", Font.BOLD, 13)); |
| | | readModeLabel.setForeground(TEXT_COLOR); |
| | | formPanel.add(readModeLabel); |
| | | // 组合框样式 - 使用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)); |
| | | |
| | | readModeComboBox = new JComboBox<>(new String[]{"主动模式", "被动模式"}); |
| | | styleComboBox(readModeComboBox); |
| | | formPanel.add(readModeComboBox); |
| | | // 创建水平布局容器 |
| | | JPanel horizontalPanel = new JPanel(new BorderLayout()); |
| | | horizontalPanel.setBackground(CARD_COLOR); |
| | | horizontalPanel.setMaximumSize(new Dimension(SCREEN_WIDTH - 100, 50)); |
| | | |
| | | card.add(formPanel, BorderLayout.CENTER); |
| | | horizontalPanel.add(label, BorderLayout.WEST); |
| | | horizontalPanel.add(comboBox, BorderLayout.CENTER); |
| | | |
| | | return card; |
| | | // 添加间距 |
| | | horizontalPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
| | | |
| | | 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() { |