826220679@qq.com
3 天以前 96f9630247478ee09dace5786ebfe46a54a6f2c0
src/dikuai/Dikuaiguanli.java
@@ -297,20 +297,17 @@
      // 割草安全距离
      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 = dikuai.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 = "未设置";
         }
      }
      JPanel mowingSafetyDistancePanel = createCardInfoItem("割草安全距离:", displaySafetyDistance);
@@ -345,24 +342,24 @@
   contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
      // 路径坐标(带查看按钮)
      JPanel pathPanel = createCardInfoItemWithButtonOnly("路径坐标:",
         "查看", e -> editPlannedPath(dikuai));
      JPanel pathPanel = createCardInfoItemWithIconButton("路径坐标:",
         createViewButton(e -> editPlannedPath(dikuai)));
      configureInteractiveLabel(getInfoItemTitleLabel(pathPanel),
         () -> editPlannedPath(dikuai),
         "点击查看/编辑路径坐标");
      contentPanel.add(pathPanel);
   contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
   JPanel baseStationPanel = createCardInfoItemWithButtonOnly("基站坐标:",
      "查看", e -> editBaseStationCoordinates(dikuai));
   JPanel baseStationPanel = createCardInfoItemWithIconButton("基站坐标:",
      createViewButton(e -> editBaseStationCoordinates(dikuai)));
   configureInteractiveLabel(getInfoItemTitleLabel(baseStationPanel),
      () -> editBaseStationCoordinates(dikuai),
      "点击查看/编辑基站坐标");
   contentPanel.add(baseStationPanel);
   contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
   JPanel boundaryOriginalPanel = createCardInfoItemWithButtonOnly("边界原始坐标:",
      "查看", e -> editBoundaryOriginalCoordinates(dikuai));
   JPanel boundaryOriginalPanel = createCardInfoItemWithIconButton("边界原始坐标:",
      createViewButton(e -> editBoundaryOriginalCoordinates(dikuai)));
   configureInteractiveLabel(getInfoItemTitleLabel(boundaryOriginalPanel),
      () -> editBoundaryOriginalCoordinates(dikuai),
      "点击查看/编辑边界原始坐标");
@@ -371,7 +368,7 @@
      JPanel completedTrackPanel = createCardInfoItemWithButton("已完成割草路径:",
         getTruncatedValue(dikuai.getMowingTrack(), 12, "未记录"),
         "查看", e -> showCompletedMowingTrackDialog(dikuai));
         createViewButton(e -> showCompletedMowingTrackDialog(dikuai)));
      setInfoItemTooltip(completedTrackPanel, dikuai.getMowingTrack());
      configureInteractiveLabel(getInfoItemTitleLabel(completedTrackPanel),
         () -> showCompletedMowingTrackDialog(dikuai),
@@ -456,6 +453,38 @@
      return itemPanel;
   }
   private JPanel createCardInfoItemWithButton(String label, String value, JButton button) {
      JPanel itemPanel = new JPanel(new BorderLayout());
      itemPanel.setBackground(CARD_BACKGROUND);
      // 增加高度以确保按钮完整显示(按钮高度约24-28像素,加上上下边距)
      itemPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 35));
      itemPanel.setPreferredSize(new Dimension(Integer.MAX_VALUE, 30));
      itemPanel.setMinimumSize(new Dimension(0, 28));
      JLabel labelComp = new JLabel(label);
      labelComp.setFont(new Font("微软雅黑", Font.PLAIN, 14));
      labelComp.setForeground(LIGHT_TEXT);
      JPanel rightPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0));
      rightPanel.setBackground(CARD_BACKGROUND);
      // 添加垂直内边距以确保按钮不被裁剪
      rightPanel.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0));
      JLabel valueComp = new JLabel(value);
      valueComp.setFont(new Font("微软雅黑", Font.PLAIN, 14));
      valueComp.setForeground(TEXT_COLOR);
      rightPanel.add(valueComp);
      rightPanel.add(button);
      itemPanel.add(labelComp, BorderLayout.WEST);
      itemPanel.add(rightPanel, BorderLayout.CENTER);
      itemPanel.putClientProperty("valueLabel", valueComp);
      itemPanel.putClientProperty("titleLabel", labelComp);
      return itemPanel;
   }
   private JPanel createCardInfoItemWithButtonOnly(String label, String buttonText, ActionListener listener) {
      JPanel itemPanel = new JPanel(new BorderLayout());
      itemPanel.setBackground(CARD_BACKGROUND);
@@ -484,6 +513,32 @@
      return itemPanel;
   }
   private JPanel createCardInfoItemWithIconButton(String label, JButton button) {
      JPanel itemPanel = new JPanel(new BorderLayout());
      itemPanel.setBackground(CARD_BACKGROUND);
      // 增加高度以确保按钮完整显示(按钮高度约24-28像素,加上上下边距)
      itemPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 35));
      itemPanel.setPreferredSize(new Dimension(Integer.MAX_VALUE, 30));
      itemPanel.setMinimumSize(new Dimension(0, 28));
      JLabel labelComp = new JLabel(label);
      labelComp.setFont(new Font("微软雅黑", Font.PLAIN, 14));
      labelComp.setForeground(LIGHT_TEXT);
      JPanel rightPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0));
      rightPanel.setBackground(CARD_BACKGROUND);
      // 添加垂直内边距以确保按钮不被裁剪
      rightPanel.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0));
      rightPanel.add(button);
      itemPanel.add(labelComp, BorderLayout.WEST);
      itemPanel.add(rightPanel, BorderLayout.CENTER);
      itemPanel.putClientProperty("titleLabel", labelComp);
      return itemPanel;
   }
      private JPanel createBoundaryInfoItem(Dikuai dikuai) {
         JPanel itemPanel = new JPanel(new BorderLayout());
         itemPanel.setBackground(CARD_BACKGROUND);
@@ -1544,15 +1599,50 @@
   }
   private JButton createDeleteButton() {
      JButton button = createStyledButton("删除", RED_COLOR, false); // 轮廓风格
      ImageIcon deleteIcon = loadIcon("image/delete.png", 16, 16);
      JButton button = new JButton();
      ImageIcon deleteIcon = loadIcon("image/delete.png", 25, 25);
      if (deleteIcon != null) {
         button.setIcon(deleteIcon);
         button.setIconTextGap(6);
      } else {
         button.setText("删除");
      }
      button.setFont(new Font("微软雅黑", Font.PLAIN, 11));
      button.setForeground(RED_COLOR);
      button.setBorder(BorderFactory.createEmptyBorder());
      button.setContentAreaFilled(false);
      button.setFocusPainted(false);
      button.setCursor(new Cursor(Cursor.HAND_CURSOR));
      button.addMouseListener(new MouseAdapter() {
         public void mouseEntered(MouseEvent e) { button.setOpaque(true); button.setBackground(new Color(255, 240, 240)); }
         public void mouseExited(MouseEvent e) { button.setOpaque(false); }
      });
      return button;
   }
   private JButton createViewButton(ActionListener listener) {
      JButton btn = new JButton();
      ImageIcon lookIcon = loadIcon("image/look.png", 25, 25);
      if (lookIcon != null) {
         btn.setIcon(lookIcon);
      } else {
         btn.setText("查看");
      }
      btn.setFont(new Font("微软雅黑", Font.PLAIN, 11));
      btn.setForeground(PRIMARY_COLOR);
      btn.setBorder(BorderFactory.createEmptyBorder());
      btn.setContentAreaFilled(false);
      btn.setFocusPainted(false);
      btn.setCursor(new Cursor(Cursor.HAND_CURSOR));
      btn.addMouseListener(new MouseAdapter() {
         public void mouseEntered(MouseEvent e) { btn.setOpaque(true); btn.setBackground(new Color(230, 250, 240)); }
         public void mouseExited(MouseEvent e) { btn.setOpaque(false); }
      });
      if (listener != null) {
         btn.addActionListener(listener);
      }
      return btn;
   }
   private JButton createPrimaryFooterButton(String text) {
      return createStyledButton(text, PRIMARY_COLOR, true); // 实心风格
   }