张世豪
17 小时以前 13d032241e1a2938a8be4f64c9171e1240e9ea1e
src/zhuye/LegendDialog.java
@@ -32,29 +32,6 @@
        mainPanel.setBackground(Color.WHITE);
        mainPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 10, 15));
        
        // 计算图例内容面板的宽度(用于设置图标尺寸)
        // 图例对话框宽度 = DIALOG_WIDTH * 0.8
        // 主面板左右边框各15像素,图例内容面板左右内边距各10像素
        int adjustedWidth = (int) Math.round(UIConfig.DIALOG_WIDTH * 0.8);
        int iconSize = adjustedWidth - 30 - 20; // 减去主面板左右边框(15*2)和图例内容面板左右内边距(10*2)
        // 创建割草机图标面板
        JPanel iconPanel = new JPanel(new BorderLayout());
        iconPanel.setBackground(Color.WHITE);
        iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); // 底部间距10像素
        JLabel gecaojiLabel = new JLabel();
        gecaojiLabel.setHorizontalAlignment(SwingConstants.CENTER);
        ImageIcon gecaojiIcon = loadIcon("image/gecaoji.png", iconSize, iconSize);
        if (gecaojiIcon != null) {
            gecaojiLabel.setIcon(gecaojiIcon);
        } else {
            // 如果图标加载失败,显示占位文本
            gecaojiLabel.setText("割草机图标");
            gecaojiLabel.setFont(new Font("微软雅黑", Font.PLAIN, 12));
        }
        iconPanel.add(gecaojiLabel, BorderLayout.CENTER);
        // 图例内容面板 - 直接添加,不使用滚动条
        JPanel contentPanel = new JPanel();
        contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
@@ -71,6 +48,7 @@
            {"路径方向", "255,0,0", "arrow"},
            {"障碍物区域", "255,0,0", "obstacle_fill"},
            {"割草机位置", "0,150,0", "mow"},
            {"往返路径", "0,0,0", "railway"},
            {"割草轨迹", "100,150,200", "trail"}
        };
        
@@ -84,8 +62,7 @@
            contentPanel.remove(contentPanel.getComponentCount() - 1);
        }
        
        // 添加图标面板和图例内容面板
        mainPanel.add(iconPanel, BorderLayout.NORTH);
        // 添加图例内容面板
        mainPanel.add(contentPanel, BorderLayout.CENTER);
        
        getContentPane().add(mainPanel);
@@ -144,11 +121,30 @@
                        g2d.fillPolygon(xPoints, yPoints, 3);
                        break;
                    case "mow":
                        g2d.setColor(itemColor);
                        g2d.fillOval(x, y, size, size);
                        g2d.setColor(new Color(100, 100, 100));
                        g2d.setStroke(new BasicStroke(1));
                        g2d.drawOval(x, y, size, size);
                        ImageIcon icon = loadIcon("image/gecaoji.png", size + 8, size + 8);
                        if (icon != null) {
                            icon.paintIcon(this, g2d, x - 4, y - 4);
                        } else {
                            g2d.setColor(itemColor);
                            g2d.fillOval(x, y, size, size);
                            g2d.setColor(new Color(100, 100, 100));
                            g2d.setStroke(new BasicStroke(1));
                            g2d.drawOval(x, y, size, size);
                        }
                        break;
                    case "railway":
                        // 1. 绘制底层黑色实线
                        g2d.setColor(Color.BLACK);
                        g2d.setStroke(new BasicStroke(3.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
                        g2d.drawLine(x, y + size/2, x + size, y + size/2);
                        // 2. 绘制顶层白色虚线
                        float dashLen = 3.0f * 2.0f;
                        float dashSpace = 3.0f * 2.0f;
                        float[] dashPattern = {dashLen, dashSpace};
                        g2d.setColor(Color.WHITE);
                        g2d.setStroke(new BasicStroke(1.2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 10.0f, dashPattern, 0.0f));
                        g2d.drawLine(x, y + size/2, x + size, y + size/2);
                        break;
                    case "trail":
                        g2d.setColor(itemColor);