| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | // å¾çç¼åï¼key 为æä»¶åï¼ä¾å¦ "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 "æ£å¨ä¼°ç®"; |
| | | 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(); |
| | | } |
| | | } |
| | | } |