张世豪
3 天以前 55d23efc30f7db5ec2d9b8a0f04a268a10f3e855
src/lujing/MowingPathGenerationPage.java
@@ -133,24 +133,37 @@
        
        // 割草宽度
        widthField = createInfoTextField(widthValue != null ? widthValue : "", true);
        contentPanel.add(createTextFieldSection("割草宽度 (厘米)", widthField));
        contentPanel.add(createTextFieldSection("割草宽度 (cm)", widthField));
        
        // 割草安全距离(只读显示)
        // 优先从Dikuai对象获取,如果Dikuai中没有,再从Device获取
        String displaySafetyDistance = "未设置";
        Device device = Device.getActiveDevice();
        if (device != null) {
            String safetyDistanceValue = device.getMowingSafetyDistance();
            if (safetyDistanceValue != null && !"-1".equals(safetyDistanceValue) && !safetyDistanceValue.trim().isEmpty()) {
                try {
                    double distanceMeters = Double.parseDouble(safetyDistanceValue.trim());
                    // 如果值大于100,认为是厘米,需要转换为米
                    if (distanceMeters > 100) {
                        distanceMeters = distanceMeters / 100.0;
                    }
                    displaySafetyDistance = String.format("%.2f米", distanceMeters);
                } catch (NumberFormatException e) {
                    displaySafetyDistance = "未设置";
        String safetyDistanceValue = null;
        // 首先尝试从Dikuai对象获取
        if (dikuai != null) {
            safetyDistanceValue = dikuai.getMowingSafetyDistance();
        }
        // 如果Dikuai中没有,从Device获取
        if ((safetyDistanceValue == null || "-1".equals(safetyDistanceValue) || safetyDistanceValue.trim().isEmpty())) {
            Device device = Device.getActiveDevice();
            if (device != null) {
                safetyDistanceValue = device.getMowingSafetyDistance();
            }
        }
        // 格式化显示值
        if (safetyDistanceValue != null && !"-1".equals(safetyDistanceValue) && !safetyDistanceValue.trim().isEmpty()) {
            try {
                double distanceMeters = Double.parseDouble(safetyDistanceValue.trim());
                // 如果值大于100,认为是厘米,需要转换为米
                if (distanceMeters > 100) {
                    distanceMeters = distanceMeters / 100.0;
                }
                displaySafetyDistance = String.format(Locale.US, "%.2fm", distanceMeters);
            } catch (NumberFormatException e) {
                displaySafetyDistance = "未设置";
            }
        }
        contentPanel.add(createInfoValueSection("割草安全距离", displaySafetyDistance));
@@ -372,7 +385,7 @@
        String rawWidthInput = widthField.getText() != null ? widthField.getText().trim() : "";
        String widthSanitized = sanitizeWidthString(widthField.getText());
        if (widthSanitized == null) {
            String message = rawWidthInput.isEmpty() ? "请先设置割草宽度(厘米)" : "割草宽度格式不正确";
                String message = rawWidthInput.isEmpty() ? "请先设置割草宽度(cm)" : "割草宽度格式不正确";
            JOptionPane.showMessageDialog(this, message, "提示", JOptionPane.WARNING_MESSAGE);
            return;
        }
@@ -459,7 +472,7 @@
        String widthStr = sanitizeWidthString(widthCmInput);
        if (widthStr == null) {
            if (showMessages) {
                String message = rawWidth.isEmpty() ? "请先设置割草宽度(厘米)" : "割草宽度格式不正确";
                String message = rawWidth.isEmpty() ? "请先设置割草宽度(cm)" : "割草宽度格式不正确";
                JOptionPane.showMessageDialog(parentComponent, message, "提示", JOptionPane.WARNING_MESSAGE);
            }
            return null;
@@ -664,25 +677,38 @@
    
    /**
     * 获取安全距离字符串(米)
     * 优先从Dikuai对象获取,如果Dikuai中没有,再从Device获取
     */
    private String getSafetyDistanceString() {
        Device device = Device.getActiveDevice();
        if (device != null) {
            String safetyDistanceValue = device.getMowingSafetyDistance();
            if (safetyDistanceValue != null && !"-1".equals(safetyDistanceValue) && !safetyDistanceValue.trim().isEmpty()) {
                try {
                    double distanceMeters = Double.parseDouble(safetyDistanceValue.trim());
                    // 如果值大于100,认为是厘米,需要转换为米
                    if (distanceMeters > 100) {
                        distanceMeters = distanceMeters / 100.0;
                    }
                    return BigDecimal.valueOf(distanceMeters)
                        .setScale(3, RoundingMode.HALF_UP)
                        .stripTrailingZeros()
                        .toPlainString();
                } catch (NumberFormatException e) {
                    // 解析失败,返回null,使用默认值
        String safetyDistanceValue = null;
        // 首先尝试从Dikuai对象获取
        if (dikuai != null) {
            safetyDistanceValue = dikuai.getMowingSafetyDistance();
        }
        // 如果Dikuai中没有,从Device获取
        if ((safetyDistanceValue == null || "-1".equals(safetyDistanceValue) || safetyDistanceValue.trim().isEmpty())) {
            Device device = Device.getActiveDevice();
            if (device != null) {
                safetyDistanceValue = device.getMowingSafetyDistance();
            }
        }
        // 格式化并返回
        if (safetyDistanceValue != null && !"-1".equals(safetyDistanceValue) && !safetyDistanceValue.trim().isEmpty()) {
            try {
                double distanceMeters = Double.parseDouble(safetyDistanceValue.trim());
                // 如果值大于100,认为是厘米,需要转换为米
                if (distanceMeters > 100) {
                    distanceMeters = distanceMeters / 100.0;
                }
                return BigDecimal.valueOf(distanceMeters)
                    .setScale(3, RoundingMode.HALF_UP)
                    .stripTrailingZeros()
                    .toPlainString();
            } catch (NumberFormatException e) {
                // 解析失败,返回null,使用默认值
            }
        }
        return null;