From 8d68e8c24e5d7f7f363041ebfe6c2b4c26068fef Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 12 十二月 2025 17:23:12 +0800
Subject: [PATCH] 新增了点击开始判断割草机是否在边界内的判断

---
 src/zhuye/gpszhuangtai.java |  179 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 179 insertions(+), 0 deletions(-)

diff --git a/src/zhuye/gpszhuangtai.java b/src/zhuye/gpszhuangtai.java
new file mode 100644
index 0000000..fd97bed
--- /dev/null
+++ b/src/zhuye/gpszhuangtai.java
@@ -0,0 +1,179 @@
+package zhuye;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.*;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 浣跨敤鍥剧墖琛ㄧず鍓茶崏鏈哄崼鏄熺姸鎬佺殑灏忕粍浠躲��
+ * 褰撳畾浣嶇姸鎬佷负锛�0->image/gps0.png, 1->gps1.png, 2->gps2.png, 4->gps4.png, 5->gps5.png銆�
+ * 鍏朵粬鍊间娇鐢� gps1.png銆傝嫢鍥剧墖鏈壘鍒帮紝鍥為��涓哄師鏈夊渾鍦堢粯鍒躲��
+ */
+public class gpszhuangtai extends JComponent {
+    private static final long serialVersionUID = 1L;
+    private static final int ICON_SIZE =16;
+    private String currentCode;
+    private Color currentColor = new Color(160, 160, 160);
+    private final Color themeColor;
+
+    // 鍥剧墖缂撳瓨锛宬ey 涓烘枃浠跺悕锛堜緥濡� "gps1.png"锛�
+    private final Map<String, Image> imageCache = new HashMap<>();
+    private Image currentImage;
+
+    public gpszhuangtai(Color themeColor) {
+        this.themeColor = themeColor != null ? themeColor : new Color(46, 139, 87);
+    setPreferredSize(new Dimension(ICON_SIZE, ICON_SIZE));
+    setMinimumSize(new Dimension(ICON_SIZE, ICON_SIZE));
+    setMaximumSize(new Dimension(ICON_SIZE, ICON_SIZE));
+        setToolTipText("鏈煡");
+    }
+
+    public void setQuality(String code) {
+        if (Objects.equals(currentCode, code)) {
+            return;
+        }
+        currentCode = code;
+        currentColor = resolveFixQualityColor(code);
+        setToolTipText(resolveFixQualityDescription(code));
+
+        String filename = mapCodeToFilename(code);
+        currentImage = loadImage(filename);
+        // 濮嬬粓浣跨敤榛樿鍥炬爣灏哄锛屼笉鏍规嵁鍥剧墖鍘熷澶у皬鏀瑰彉缁勪欢棣栭�夊昂瀵�
+        setPreferredSize(new Dimension(ICON_SIZE, ICON_SIZE));
+
+        repaint();
+    }
+
+    private String mapCodeToFilename(String code) {
+        if (code == null) {
+            return "gps1.png";
+        }
+        switch (code) {
+            case "0":
+                return "gps0.png";
+            case "1":
+                return "gps1.png";
+            case "2":
+                return "gps2.png";
+            case "4":
+                return "gps4.png";
+            case "5":
+                return "gps5.png";
+            default:
+                return "gps1.png";
+        }
+    }
+
+    private Image loadImage(String filename) {
+        if (filename == null) return null;
+        if (imageCache.containsKey(filename)) {
+            return imageCache.get(filename);
+        }
+
+        // 棣栧厛灏濊瘯浠庣被璺緞鍔犺浇锛堟墦鍖呭悗鍙敤锛�
+        String path = "/image/" + filename;
+        URL res = getClass().getResource(path);
+        Image img = null;
+        if (res != null) {
+            img = new ImageIcon(res).getImage();
+        } else {
+            // 鍥為��鍒扮浉瀵规枃浠剁郴缁熻矾寰勶紙寮�鍙戠幆澧冧笅锛�
+            try {
+                img = new ImageIcon("image/" + filename).getImage();
+            } catch (Exception ignored) {
+                img = null;
+            }
+        }
+
+        imageCache.put(filename, img);
+        return img;
+    }
+
+    private Color resolveFixQualityColor(String code) {
+        if (code == null) {
+            return new Color(160, 160, 160);
+        }
+        switch (code) {
+            case "0":
+                return new Color(160, 160, 160);
+            case "1":
+                return new Color(52, 152, 219);
+            case "2":
+                return new Color(26, 188, 156);
+            case "3":
+                return new Color(155, 89, 182);
+            case "4":
+                return themeColor;
+            case "5":
+                return new Color(241, 196, 15);
+            case "6":
+                return new Color(231, 76, 60);
+            case "7":
+                return new Color(230, 126, 34);
+            default:
+                return new Color(95, 95, 95);
+        }
+    }
+
+    private String resolveFixQualityDescription(String code) {
+        if (code == null) {
+            return "鏈煡";
+        }
+        switch (code) {
+            case "0":
+                return "鏈畾浣�";
+            case "1":
+                return "鍗曠偣瀹氫綅";
+            case "2":
+                return "鐮佸樊鍒�";
+            case "3":
+                return "鏃犳晥PPS";
+            case "4":
+                return "鍥哄畾瑙�";
+            case "5":
+                return "娴偣瑙�";
+            case "6":
+                return "姝e湪浼扮畻";
+            case "7":
+                return "浜哄伐杈撳叆鍥哄畾鍊�";
+            default:
+                return "鍏朵粬";
+        }
+    }
+
+    @Override
+    protected void paintComponent(Graphics g) {
+        super.paintComponent(g);
+        Graphics2D g2 = (Graphics2D) g.create();
+        try {
+            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+
+            int w = getWidth();
+            int h = getHeight();
+
+            if (currentImage != null) {
+                // 寮哄埗浠� ICON_SIZE x ICON_SIZE 缁樺埗鍥炬爣骞跺眳涓�
+                int drawW = ICON_SIZE;
+                int drawH = ICON_SIZE;
+                int x = (w - drawW) / 2;
+                int y = (h - drawH) / 2;
+                g2.drawImage(currentImage, x, y, drawW, drawH, null);
+            } else {
+                // 鍥為��涓哄渾鍦堢粯鍒讹紝淇濈暀鍘熸牱椋庢牸
+                int diameter = Math.min(w, h) - 2;
+                int x = (w - diameter) / 2;
+                int y = (h - diameter) / 2;
+                g2.setColor(currentColor);
+                g2.fillOval(x, y, diameter, diameter);
+                g2.setColor(new Color(255, 255, 255, 128));
+                g2.drawOval(x, y, diameter, diameter);
+            }
+        } finally {
+            g2.dispose();
+        }
+    }
+}

--
Gitblit v1.10.0