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