| | |
| | | package set; |
| | | |
| | | import baseStation.BaseStation; |
| | | import gecaoji.Device; |
| | | import gecaoji.MowerSafetyDistanceCalculator; |
| | | |
| | | import zhuye.MapRenderer; |
| | | import zhuye.Shouye; |
| | |
| | | |
| | | // 设置项ç»ä»¶ |
| | | private JLabel mowerIdLabel; |
| | | private JLabel mowerSizeLabel; |
| | | private JLabel mowingSafetyDistanceLabel; |
| | | private JLabel baseStationIdLabel; |
| | | private JLabel handheldMarkerLabel; |
| | | private JLabel simCardNumberLabel; |
| | |
| | | private JLabel measurementModeEnabledLabel; |
| | | |
| | | private JButton mowerIdEditBtn; |
| | | private JButton mowerSizeEditBtn; |
| | | private JButton mowingSafetyDistanceEditBtn; |
| | | private JButton baseStationIdEditBtn; |
| | | private JButton handheldEditBtn; |
| | | private JButton checkUpdateBtn; |
| | |
| | | mowerIdLabel = (JLabel) mowerIdPanel.getClientProperty("valueLabel"); |
| | | mowerIdEditBtn = (JButton) mowerIdPanel.getClientProperty("editButton"); |
| | | |
| | | // å²èæºé¿å®½ |
| | | JPanel mowerSizePanel = createSettingItemPanel("å²èæºé¿å®½", |
| | | formatMowerSize(), true); |
| | | mowerSizeLabel = (JLabel) mowerSizePanel.getClientProperty("valueLabel"); |
| | | mowerSizeEditBtn = (JButton) mowerSizePanel.getClientProperty("editButton"); |
| | | |
| | | // å²èå®å
¨è·ç¦» |
| | | JPanel mowingSafetyDistancePanel = createSettingItemPanel("å²èå®å
¨è·ç¦»", |
| | | formatMowingSafetyDistance(), true); |
| | | mowingSafetyDistanceLabel = (JLabel) mowingSafetyDistancePanel.getClientProperty("valueLabel"); |
| | | mowingSafetyDistanceEditBtn = (JButton) mowingSafetyDistancePanel.getClientProperty("editButton"); |
| | | |
| | | JPanel baseStationIdPanel = createSettingItemPanel("å·®ååºåç«ç¼å·", |
| | | resolveBaseStationId(), true); |
| | | baseStationIdLabel = (JLabel) baseStationIdPanel.getClientProperty("valueLabel"); |
| | |
| | | |
| | | // æ·»å 设置项ï¼ä½¿ç¨åå²çº¿åé |
| | | addSettingItem(panel, mowerIdPanel, true); |
| | | addSettingItem(panel, mowerSizePanel, true); |
| | | addSettingItem(panel, mowingSafetyDistancePanel, true); |
| | | addSettingItem(panel, baseStationIdPanel, true); |
| | | addSettingItem(panel, handheldPanel, true); |
| | | addSettingItem(panel, simCardPanel, true); |
| | |
| | | return seconds + "ç§"; |
| | | } |
| | | |
| | | /** |
| | | * å°å符串å¼è½¬æ¢ä¸ºç±³ï¼å
¼å®¹æ§æ°æ®ï¼å¦æå¼å¤§äº100认为æ¯åç±³ï¼éè¦é¤ä»¥100ï¼ |
| | | */ |
| | | private double convertToMeters(String value) { |
| | | if (value == null || value.trim().isEmpty() || "-1".equals(value.trim())) { |
| | | return -1; |
| | | } |
| | | try { |
| | | double val = Double.parseDouble(value.trim()); |
| | | // 妿å¼å¤§äº100ï¼è®¤ä¸ºæ¯åç±³ï¼éè¦è½¬æ¢ä¸ºç±³ |
| | | if (val > 100) { |
| | | return val / 100.0; |
| | | } |
| | | return val; |
| | | } catch (NumberFormatException e) { |
| | | return -1; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¼å¼åæ°å¼ä¸ºç±³ï¼ä¿ç2ä½å°æ° |
| | | */ |
| | | private String formatMeters(double value) { |
| | | if (value < 0) { |
| | | return "æªè®¾ç½®"; |
| | | } |
| | | return String.format("%.2f", value) + "m"; |
| | | } |
| | | |
| | | private String formatMowerSize() { |
| | | Device device = Device.getActiveDevice(); |
| | | if (device == null) { |
| | | return "æªè®¾ç½®"; |
| | | } |
| | | String width = device.getMowerWidth(); |
| | | String length = device.getMowerLength(); |
| | | double widthMeters = convertToMeters(width); |
| | | double lengthMeters = convertToMeters(length); |
| | | |
| | | if (widthMeters < 0 && lengthMeters < 0) { |
| | | return "æªè®¾ç½®"; |
| | | } |
| | | |
| | | String widthStr = widthMeters >= 0 ? formatMeters(widthMeters) : "æªè®¾ç½®"; |
| | | String lengthStr = lengthMeters >= 0 ? formatMeters(lengthMeters) : "æªè®¾ç½®"; |
| | | return lengthStr + " Ã " + widthStr; |
| | | } |
| | | |
| | | private String formatMowingSafetyDistance() { |
| | | Device device = Device.getActiveDevice(); |
| | | if (device == null) { |
| | | return "æªè®¾ç½®"; |
| | | } |
| | | String distance = device.getMowingSafetyDistance(); |
| | | double distanceMeters = convertToMeters(distance); |
| | | if (distanceMeters < 0) { |
| | | return "æªè®¾ç½®"; |
| | | } |
| | | return formatMeters(distanceMeters); |
| | | } |
| | | |
| | | |
| | | private JPanel createSettingItemPanel(String title, String value, boolean editable) { |
| | | JPanel panel = new JPanel(new GridBagLayout()); |
| | |
| | | // ä»Setsysç±»å è½½æ°æ® |
| | | setData.initializeFromProperties(); |
| | | baseStation.load(); |
| | | // ä»device.propertieså è½½è®¾å¤æ°æ® |
| | | Device device = Device.getActiveDevice(); |
| | | if (device != null) { |
| | | device.initFromProperties(); |
| | | } |
| | | updateDisplay(); |
| | | // å 载并åºç¨ä¸æ¬¡ä¿åçè§å¾ä¸å¿åæ |
| | | loadViewCenterFromProperties(); |
| | |
| | | mowerIdLabel.setText(setData.getMowerId() != null ? setData.getMowerId() : "æªè®¾ç½®"); |
| | | } |
| | | |
| | | // æ´æ°å²èæºé¿å®½æ¾ç¤º |
| | | if (mowerSizeLabel != null) { |
| | | mowerSizeLabel.setText(formatMowerSize()); |
| | | } |
| | | |
| | | // æ´æ°å²èå®å
¨è·ç¦»æ¾ç¤º |
| | | if (mowingSafetyDistanceLabel != null) { |
| | | mowingSafetyDistanceLabel.setText(formatMowingSafetyDistance()); |
| | | } |
| | | |
| | | if (baseStationIdLabel != null) { |
| | | baseStationIdLabel.setText(resolveBaseStationId()); |
| | | } |
| | |
| | | mowerIdEditBtn.addActionListener(e -> editMowerId()); |
| | | } |
| | | |
| | | // å²èæºé¿å®½ç¼è¾æé®äºä»¶ |
| | | if (mowerSizeEditBtn != null) { |
| | | mowerSizeEditBtn.addActionListener(e -> editMowerSize()); |
| | | } |
| | | |
| | | // å²èå®å
¨è·ç¦»ç¼è¾æé®äºä»¶ |
| | | if (mowingSafetyDistanceEditBtn != null) { |
| | | mowingSafetyDistanceEditBtn.addActionListener(e -> editMowingSafetyDistance()); |
| | | } |
| | | |
| | | if (baseStationIdEditBtn != null) { |
| | | baseStationIdEditBtn.addActionListener(e -> editBaseStationId()); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private void editMowerSize() { |
| | | Device device = Device.getActiveDevice(); |
| | | if (device == null) { |
| | | JOptionPane.showMessageDialog(this, "è®¾å¤æªåå§å", "é误", JOptionPane.ERROR_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // è·åå½åå¼å¹¶è½¬æ¢ä¸ºç±³ï¼å
¼å®¹æ§æ°æ®ï¼ |
| | | double currentLengthMeters = convertToMeters(device.getMowerLength()); |
| | | double currentWidthMeters = convertToMeters(device.getMowerWidth()); |
| | | |
| | | String currentLengthStr = currentLengthMeters >= 0 ? String.format("%.2f", currentLengthMeters) : ""; |
| | | String currentWidthStr = currentWidthMeters >= 0 ? String.format("%.2f", currentWidthMeters) : ""; |
| | | |
| | | // å建è¾å
¥å¯¹è¯æ¡ |
| | | JPanel inputPanel = new JPanel(new GridLayout(2, 2, 5, 5)); |
| | | inputPanel.add(new JLabel("é¿åº¦(m):")); |
| | | JTextField lengthField = new JTextField(currentLengthStr); |
| | | inputPanel.add(lengthField); |
| | | inputPanel.add(new JLabel("宽度(m):")); |
| | | JTextField widthField = new JTextField(currentWidthStr); |
| | | inputPanel.add(widthField); |
| | | |
| | | int result = JOptionPane.showConfirmDialog(this, |
| | | inputPanel, |
| | | "ä¿®æ¹å²èæºé¿å®½", |
| | | JOptionPane.OK_CANCEL_OPTION, |
| | | JOptionPane.QUESTION_MESSAGE); |
| | | |
| | | if (result == JOptionPane.OK_OPTION) { |
| | | String newLength = lengthField.getText().trim(); |
| | | String newWidth = widthField.getText().trim(); |
| | | |
| | | // éªè¯è¾å
¥ |
| | | if (newLength.isEmpty() && newWidth.isEmpty()) { |
| | | JOptionPane.showMessageDialog(this, "é¿åº¦å宽度ä¸è½åæ¶ä¸ºç©º", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | double lengthValue = -1; |
| | | double widthValue = -1; |
| | | |
| | | if (!newLength.isEmpty()) { |
| | | try { |
| | | lengthValue = Double.parseDouble(newLength); |
| | | if (lengthValue < 0) { |
| | | JOptionPane.showMessageDialog(this, "é¿åº¦å¿
须大äºçäº0", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | } catch (NumberFormatException e) { |
| | | JOptionPane.showMessageDialog(this, "é¿åº¦å¿
é¡»æ¯ææçæ°å", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | if (!newWidth.isEmpty()) { |
| | | try { |
| | | widthValue = Double.parseDouble(newWidth); |
| | | if (widthValue < 0) { |
| | | JOptionPane.showMessageDialog(this, "宽度å¿
须大äºçäº0", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | } catch (NumberFormatException e) { |
| | | JOptionPane.showMessageDialog(this, "宽度å¿
é¡»æ¯ææçæ°å", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // æ´æ°è®¾å¤å±æ§ï¼ä¿å为米ï¼ä¿ç2ä½å°æ°ï¼ |
| | | if (lengthValue >= 0) { |
| | | String lengthStr = String.format("%.2f", lengthValue); |
| | | device.setMowerLength(lengthStr); |
| | | device.updateField("mowerLength", lengthStr); |
| | | } else { |
| | | device.setMowerLength("-1"); |
| | | device.updateField("mowerLength", "-1"); |
| | | } |
| | | |
| | | if (widthValue >= 0) { |
| | | String widthStr = String.format("%.2f", widthValue); |
| | | device.setMowerWidth(widthStr); |
| | | device.updateField("mowerWidth", widthStr); |
| | | } else { |
| | | device.setMowerWidth("-1"); |
| | | device.updateField("mowerWidth", "-1"); |
| | | } |
| | | |
| | | // 妿é¿åº¦åå®½åº¦é½ææï¼èªå¨è®¡ç®å®å
¨è·ç¦» |
| | | if (lengthValue > 0 && widthValue > 0) { |
| | | try { |
| | | double safetyDistance = MowerSafetyDistanceCalculator.calculateSafetyDistance(lengthValue, widthValue); |
| | | String safetyDistanceStr = String.format("%.2f", safetyDistance); |
| | | device.setMowingSafetyDistance(safetyDistanceStr); |
| | | device.updateField("mowingSafetyDistance", safetyDistanceStr); |
| | | |
| | | // æ´æ°å®å
¨è·ç¦»æ¾ç¤º |
| | | if (mowingSafetyDistanceLabel != null) { |
| | | mowingSafetyDistanceLabel.setText(formatMowingSafetyDistance()); |
| | | } |
| | | } catch (IllegalArgumentException e) { |
| | | // å¦æè®¡ç®å¤±è´¥ï¼ä¸æ´æ°å®å
¨è·ç¦» |
| | | System.err.println("计ç®å®å
¨è·ç¦»å¤±è´¥: " + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | // ä¿åå°device.properties |
| | | device.saveToProperties(); |
| | | |
| | | // æ´æ°æ¾ç¤º |
| | | if (mowerSizeLabel != null) { |
| | | mowerSizeLabel.setText(formatMowerSize()); |
| | | } |
| | | JOptionPane.showMessageDialog(this, "å²èæºé¿å®½æ´æ°æå" + |
| | | (lengthValue > 0 && widthValue > 0 ? "ï¼å®å
¨è·ç¦»å·²èªå¨è®¡ç®" : ""), |
| | | "æå", JOptionPane.INFORMATION_MESSAGE); |
| | | } |
| | | } |
| | | |
| | | private void editMowingSafetyDistance() { |
| | | Device device = Device.getActiveDevice(); |
| | | if (device == null) { |
| | | JOptionPane.showMessageDialog(this, "è®¾å¤æªåå§å", "é误", JOptionPane.ERROR_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // è·åå½åå¼å¹¶è½¬æ¢ä¸ºç±³ï¼å
¼å®¹æ§æ°æ®ï¼ |
| | | double currentDistanceMeters = convertToMeters(device.getMowingSafetyDistance()); |
| | | String currentValueStr = currentDistanceMeters >= 0 ? String.format("%.2f", currentDistanceMeters) : ""; |
| | | |
| | | String newValue = (String) JOptionPane.showInputDialog(this, |
| | | "请è¾å
¥å²èå®å
¨è·ç¦»(åä½:m):", |
| | | "ä¿®æ¹å²èå®å
¨è·ç¦»", |
| | | JOptionPane.QUESTION_MESSAGE, |
| | | null, |
| | | null, |
| | | currentValueStr); |
| | | |
| | | if (newValue == null) { |
| | | return; // ç¨æ·åæ¶ |
| | | } |
| | | |
| | | newValue = newValue.trim(); |
| | | if (newValue.isEmpty()) { |
| | | JOptionPane.showMessageDialog(this, "å²èå®å
¨è·ç¦»ä¸è½ä¸ºç©º", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // éªè¯è¾å
¥ |
| | | double distanceValue; |
| | | try { |
| | | distanceValue = Double.parseDouble(newValue); |
| | | if (distanceValue < 0) { |
| | | JOptionPane.showMessageDialog(this, "å²èå®å
¨è·ç¦»å¿
须大äºçäº0", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | } catch (NumberFormatException e) { |
| | | JOptionPane.showMessageDialog(this, "å²èå®å
¨è·ç¦»å¿
é¡»æ¯ææçæ°å", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // æ´æ°è®¾å¤å±æ§ï¼ä¿å为米ï¼ä¿ç2ä½å°æ°ï¼ |
| | | String distanceStr = String.format("%.2f", distanceValue); |
| | | device.setMowingSafetyDistance(distanceStr); |
| | | device.updateField("mowingSafetyDistance", distanceStr); |
| | | |
| | | // ä¿åå°device.properties |
| | | device.saveToProperties(); |
| | | |
| | | // æ´æ°æ¾ç¤º |
| | | if (mowingSafetyDistanceLabel != null) { |
| | | mowingSafetyDistanceLabel.setText(formatMowingSafetyDistance()); |
| | | } |
| | | JOptionPane.showMessageDialog(this, "å²èå®å
¨è·ç¦»æ´æ°æå", "æå", JOptionPane.INFORMATION_MESSAGE); |
| | | } |
| | | |
| | | private void editHandheldMarkerId() { |
| | | String currentValue = setData.getHandheldMarkerId() != null ? setData.getHandheldMarkerId() : ""; |
| | | String newValue = (String) JOptionPane.showInputDialog(this, |