From 8d662de2fd262b3a485f16e197cb4d0ca2a61cdf Mon Sep 17 00:00:00 2001
From: zsh_root <979909237@qq.com>
Date: 星期三, 10 十二月 2025 17:03:47 +0800
Subject: [PATCH] 发布版V1.0

---
 src/PublicPannel/AntiCollisionPanel.java |  365 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 234 insertions(+), 131 deletions(-)

diff --git a/src/PublicPannel/AntiCollisionPanel.java b/src/PublicPannel/AntiCollisionPanel.java
index a3c40c6..73a4b09 100644
--- a/src/PublicPannel/AntiCollisionPanel.java
+++ b/src/PublicPannel/AntiCollisionPanel.java
@@ -7,239 +7,342 @@
 import java.awt.*;
 
 public class AntiCollisionPanel extends JPanel {
-    /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private MainFrame mainFrame;
+
+    private static final long serialVersionUID = 1L;
+    private MainFrame mainFrame;
     private JLabel[] labels;
     private JTextField[] textFields;
-    
+    private String dizhi0x4E;
+    private JPanel relayPanel; // 缁х數鍣ㄤ笓鐢ㄩ潰鏉�
+    private JPanel basicPanel; // 鍩虹鍙傛暟闈㈡澘
+
     public AntiCollisionPanel(MainFrame mainFrame) {
         this.mainFrame = mainFrame;
         initializeUI();
     }
-    
+
     private void initializeUI() {
-        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
-        
-        // 氝樓滅袉統杅砐
-        String[][] parameters = {
-            {"14.", "relay1.alarm.distance1"},
-            {"16.", "relay1.alarm.distance2"},
-            {"18.", "relay1.alarm.distance3"},
-            {"20.", "modbus.address"},
-            {"4A.", "whitelist.start"},
-            {"4C.", "whitelist.end"},
-            {"50.", "relay.duration"},
-            {"52.", "ranging.output.format"},
-            {"54.", "antenna.cable.length"},
-            {"58.", "feedline.length"},
-            {"F0.", "relay1.control"},
-            {"F2.", "relay2.control"},
-            {"F4.", "relay2.alarm.distance1"},
-            {"F6.", "relay2.alarm.distance2"},
-            {"F8.", "relay2.alarm.distance3"},            
+        setLayout(new BorderLayout(0, 10));
+
+        // 鍩烘湰鍙傛暟閰嶇疆
+        String[][] basicParameters = {
+                {"14.", "relay1.alarm.distance1"},
+                {"16.", "relay1.alarm.distance2"},
+                {"18.", "relay1.alarm.distance3"},
+                {"20.", "modbus.address"},
+                {"4A.", "whitelist.start"},
+                {"4C.", "whitelist.end"},
+                {"50.", "relay.duration"},
+                {"52.", "ranging.output.format"},
+                {"54.", "antenna.cable.length"},
+                {"58.", "feedline.length"},
         };
-        
-        labels = new JLabel[parameters.length];
-        textFields = new JTextField[parameters.length];
-        
-        for (int i = 0; i < parameters.length; i++) {
-            addParameterField(this, parameters[i][0], parameters[i][1], i);
+
+        labels = new JLabel[basicParameters.length + 5]; // 鍩烘湰鍙傛暟 + 5涓户鐢靛櫒鍙傛暟
+        textFields = new JTextField[basicParameters.length + 5];
+
+        // 鍒涘缓鍩虹鍙傛暟闈㈡澘
+        createBasicPanel(basicParameters);
+
+        // 鍒涘缓缁х數鍣ㄤ笓鐢ㄩ潰鏉�
+        createRelayPanel();
+
+        // 浣跨敤JSplitPane瀹炵幇2:1鐨勬瘮渚�
+        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, basicPanel, relayPanel);
+        splitPane.setResizeWeight(0.7); // 鍩虹闈㈡澘鍗�1/3锛岀户鐢靛櫒闈㈡澘鍗�2/3
+        splitPane.setDividerLocation(0.7); // 鍒濆鍒嗗壊浣嶇疆涓�1/3澶�
+        splitPane.setDividerSize(5); // 璁剧疆鍒嗗壊鏉″ぇ灏�
+        splitPane.setBorder(BorderFactory.createEmptyBorder());
+
+        add(splitPane, BorderLayout.CENTER);
+    }
+
+    private void createBasicPanel(String[][] basicParameters) {
+        // 鍒涘缓鍩虹鍙傛暟闈㈡澘
+        basicPanel = new JPanel();
+        basicPanel.setLayout(new BoxLayout(basicPanel, BoxLayout.Y_AXIS));
+        basicPanel.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createLineBorder(Color.GRAY),
+                mainFrame.getString("basic.settings"))); // 鍩虹璁剧疆
+
+        // 娣诲姞鍩烘湰鍙傛暟
+        for (int i = 0; i < basicParameters.length; i++) {
+            addParameterField(basicPanel, basicParameters[i][0], basicParameters[i][1], i);
         }
     }
-    
+
+    private void createRelayPanel() {
+        // 鍒涘缓缁х數鍣ㄩ潰鏉�
+        relayPanel = new JPanel();
+        relayPanel.setLayout(new BorderLayout(0, 5));
+        relayPanel.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createLineBorder(Color.GRAY),
+                mainFrame.getString("relay.settings"))); // 缁х數鍣ㄨ缃�
+
+        // 缁х數鍣ㄥ弬鏁�
+        String[][] relayParameters = {
+                {"F0.", "relay1.control"},
+                {"F2.", "relay2.control"},
+                {"F4.", "relay2.alarm.distance1"},
+                {"F6.", "relay2.alarm.distance2"},
+                {"F8.", "relay2.alarm.distance3"},
+        };
+
+        // 鍒涘缓鍙傛暟闈㈡澘
+        JPanel relayParamsPanel = new JPanel();
+        relayParamsPanel.setLayout(new BoxLayout(relayParamsPanel, BoxLayout.Y_AXIS));
+
+        // 娣诲姞缁х數鍣ㄥ弬鏁板埌涓撶敤闈㈡澘
+        int basicParamsCount = labels.length - 5; // 鍩烘湰鍙傛暟鏁伴噺
+        for (int i = 0; i < relayParameters.length; i++) {
+            addParameterField(relayParamsPanel, relayParameters[i][0], relayParameters[i][1], basicParamsCount + i);
+        }
+
+        // 灏嗗弬鏁伴潰鏉垮拰鎸夐挳闈㈡澘娣诲姞鍒扮户鐢靛櫒闈㈡澘
+        relayPanel.add(relayParamsPanel, BorderLayout.CENTER);
+    }
+
     private void addParameterField(JPanel panel, String address, String paramKey, int index) {
-        JPanel paramPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0)); // 党蜊潔擒峈5砉匼
-        
+        JPanel paramPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
+
         labels[index] = new JLabel(address + " " + mainFrame.getString(paramKey));
         labels[index].setPreferredSize(new Dimension(140, 25));
-        
+
         textFields[index] = new JTextField();
         textFields[index].setPreferredSize(new Dimension(120, 25));
-        
+
         paramPanel.add(labels[index]);
         paramPanel.add(textFields[index]);
-        
-        // 氝樓潔擒
+
+        // 璁剧疆鍥哄畾楂樺害
         paramPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 35));
         panel.add(paramPanel);
     }
-    
+
+
+
     public void updateLanguage() {
-        // 載陔垀衄梓ワ腔恅掛
-        String[][] parameters = {
-            {"14.", "relay1.alarm.distance1"},
-            {"16.", "relay1.alarm.distance2"},
-            {"18.", "relay1.alarm.distance3"},
-            {"20.", "modbus.address"},
-            {"4A.", "whitelist.start"},
-            {"4C.", "whitelist.end"},
-            {"50.", "relay.duration"},
-            {"52.", "ranging.output.format"},
-            {"54.", "antenna.cable.length"},
-            {"58.", "feedline.length"},
-            {"F0.", "relay1.control"},
-            {"F2.", "relay2.control"},
-            {"F4.", "relay2.alarm.distance1"},
-            {"F6.", "relay2.alarm.distance2"},
-            {"F8.", "relay2.alarm.distance3"},            
+        // 鍩烘湰鍙傛暟
+        String[][] basicParameters = {
+                {"14.", "relay1.alarm.distance1"},
+                {"16.", "relay1.alarm.distance2"},
+                {"18.", "relay1.alarm.distance3"},
+                {"20.", "modbus.address"},
+                {"4A.", "whitelist.start"},
+                {"4C.", "whitelist.end"},
+                {"50.", "relay.duration"},
+                {"52.", "ranging.output.format"},
+                {"54.", "antenna.cable.length"},
+                {"58.", "feedline.length"},
         };
-        
-        for (int i = 0; i < parameters.length && i < labels.length; i++) {
-            labels[i].setText(parameters[i][0] + " " + mainFrame.getString(parameters[i][1]));
+
+        // 鏇存柊鍩烘湰鍙傛暟鏍囩
+        for (int i = 0; i < basicParameters.length && i < labels.length; i++) {
+            labels[i].setText(basicParameters[i][0] + " " + mainFrame.getString(basicParameters[i][1]));
         }
-        
+
+        // 缁х數鍣ㄥ弬鏁�
+        String[][] relayParameters = {
+                {"F0.", "relay1.control"},
+                {"F2.", "relay2.control"},
+                {"F4.", "relay2.alarm.distance1"},
+                {"F6.", "relay2.alarm.distance2"},
+                {"F8.", "relay2.alarm.distance3"},
+        };
+
+        // 鏇存柊缁х數鍣ㄥ弬鏁版爣绛�
+        int basicParamsCount = basicParameters.length;
+        for (int i = 0; i < relayParameters.length && (basicParamsCount + i) < labels.length; i++) {
+            labels[basicParamsCount + i].setText(relayParameters[i][0] + " " + mainFrame.getString(relayParameters[i][1]));
+        }
+
+        // 鏇存柊闈㈡澘鏍囬
+        if (basicPanel.getBorder() instanceof javax.swing.border.TitledBorder) {
+            ((javax.swing.border.TitledBorder) basicPanel.getBorder())
+                    .setTitle(mainFrame.getString("basic.settings"));
+        }
+
+        if (relayPanel.getBorder() instanceof javax.swing.border.TitledBorder) {
+            ((javax.swing.border.TitledBorder) relayPanel.getBorder())
+                    .setTitle(mainFrame.getString("relay.settings"));
+        }
+
         revalidate();
         repaint();
     }
-    
-    // 新增:获取文本框数组的方法
+
+    // 鏂板锛氳幏鍙栨枃鏈鏁扮粍鐨勬柟娉�
     public JTextField[] getTextFields() {
         return textFields;
     }
+
     /**
-     * 更新防碰撞面板字段
+     * 鏇存柊闃茬鎾為潰鏉垮瓧娈� - 鍩虹鍙傛暟閮ㄥ垎
      */
     public void updateFields(DellTag55AA03.ParseResult result) {
         if (result == null) {
-            
             return;
         }
-        
-       
-        
+
         try {
-            // 根据参数顺序更新对应的文本框
-            // 注意:这里需要根据实际的防碰撞参数进行映射
+            // 鏍规嵁鍙傛暟椤哄簭鏇存柊瀵瑰簲鐨勬枃鏈
+            // 娉ㄦ剰锛氳繖閲岄渶瑕佹牴鎹疄闄呯殑闃茬鎾炲弬鏁拌繘琛屾槧灏�
             if (textFields.length > 0 && result.dizhi0x14 != null) {
-                textFields[0].setText(String.valueOf(result.dizhi0x14)); // 继电器1报警距离1
+                textFields[0].setText(String.valueOf(result.dizhi0x14)); // 缁х數鍣�1鎶ヨ璺濈1
             }
-            
+
             if (textFields.length > 1 && result.dizhi0x16 != null) {
-                textFields[1].setText(String.valueOf(result.dizhi0x16)); // 继电器1报警距离2
+                textFields[1].setText(String.valueOf(result.dizhi0x16)); // 缁х數鍣�1鎶ヨ璺濈2
             }
-            
-            if (textFields.length > 2 && result.dizhi0x18 != null) {// 继电器1报警距离3
-                textFields[2].setText(String.valueOf(result.dizhi0x18)); 
+
+            if (textFields.length > 2 && result.dizhi0x18 != null) {// 缁х數鍣�1鎶ヨ璺濈3
+                textFields[2].setText(String.valueOf(result.dizhi0x18));
             }
-          
-          //20.Modbus地址
+
+            //20.Modbus鍦板潃
             if (textFields.length > 3 && result.dizhi0x20 != null) {
-                textFields[3].setText(String.valueOf(result.dizhi0x20)); 
+                textFields[3].setText(String.valueOf(result.dizhi0x20));
             }
-          //4A.白名单起始
+            //4A.鐧藉悕鍗曡捣濮�
             if (textFields.length > 4 && result.dizhi0x4A != null) {
-                textFields[4].setText(String.valueOf(result.dizhi0x4A)); 
+                textFields[4].setText(String.valueOf(result.dizhi0x4A));
             }
-          //4C.白名单结束
+            //4C.鐧藉悕鍗曠粨鏉�
             if (textFields.length > 5 && result.dizhi0x4C != null) {
-                textFields[5].setText(String.valueOf(result.dizhi0x4C)); 
+                textFields[5].setText(String.valueOf(result.dizhi0x4C));
             }
-          //50.继电器持续时间
+            //4E.鐧藉悕鍗曠粨鏉�
+            setDizhi0x4E( String.valueOf(result.dizhi0x4E));
+
+            //50.缁х數鍣ㄦ寔缁椂闂�
             if (textFields.length > 6 ) {
-                textFields[6].setText(String.valueOf(result.dizhi0x50)); 
+                textFields[6].setText(String.valueOf(result.dizhi0x50));
             }
-          //52.测距输出格式
+            //52.娴嬭窛杈撳嚭鏍煎紡
             if (textFields.length > 7 && result.dizhi0x52 != null) {
-                textFields[7].setText(String.valueOf(result.dizhi0x52)); 
+                textFields[7].setText(String.valueOf(result.dizhi0x52));
             }
-          //54.天线电缆长度
+
+            //54.澶╃嚎鐢电紗闀垮害
             if (textFields.length > 8 && result.dizhi0x54 != null) {
-                textFields[8].setText(String.valueOf(result.dizhi0x54)); 
+                textFields[8].setText(String.valueOf(result.dizhi0x54));
             }
-          //58.馈线长度
+            //58.棣堢嚎闀垮害
             if (textFields.length > 9 ) {
-                textFields[9].setText(String.valueOf(result.dizhi0x58)); 
+                textFields[9].setText(String.valueOf(result.dizhi0x58));
             }
-          //F0.继电器1控制
-            if (textFields.length > 10 && result.dizhi0xF0 != null) {
-                textFields[10].setText(String.valueOf(result.dizhi0xF0)); 
-            }
-          //F2.继电器2控制
-            if (textFields.length > 11 && result.dizhi0xF2 != null) {
-                textFields[11].setText(String.valueOf(result.dizhi0xF2)); 
-            }
-          //F4.继电器2报警距离1
-            if (textFields.length > 12 && result.dizhi0xF4 != null) {
-                textFields[12].setText(String.valueOf(result.dizhi0xF4)); 
-            }
-          //F6.继电器2报警距离2
-            if (textFields.length > 13 && result.dizhi0xF6 != null) {
-                textFields[13].setText(String.valueOf(result.dizhi0xF6)); 
-            }
-          //F8.继电器2报警距离3
-            if (textFields.length > 14 && result.dizhi0xF8 != null) {
-                textFields[14].setText(String.valueOf(result.dizhi0xF8)); 
-            }
-            
         } catch (Exception e) {
             System.err.println("Error updating AntiCollisionPanel fields: " + e.getMessage());
             e.printStackTrace();
         }
-        
-        // 重新验证和重绘面板
-        revalidate();
-        repaint();
+
+        // 鍙噸鏂伴獙璇佸拰閲嶇粯鍩虹闈㈡澘
+        basicPanel.revalidate();
+        basicPanel.repaint();
     }
+
+    /**
+     * 鏇存柊闃茬鎾為潰鏉垮瓧娈� - 缁х數鍣ㄥ弬鏁伴儴鍒�
+     */
+    public void updateFields2(DellTag55AA03.ParseResult result) {
+        if (result == null) {
+            return;
+        }
+        try {
+            //F0.缁х數鍣�1鎺у埗
+            if (textFields.length > 10 && result.dizhi0xF0 != null) {
+                textFields[10].setText(String.valueOf(result.dizhi0xF0));
+            }
+            //F2.缁х數鍣�2鎺у埗
+            if (textFields.length > 11 && result.dizhi0xF2 != null) {
+                textFields[11].setText(String.valueOf(result.dizhi0xF2));
+            }
+            //F4.缁х數鍣�2鎶ヨ璺濈1
+            if (textFields.length > 12 && result.dizhi0xF4 != null) {
+                textFields[12].setText(String.valueOf(result.dizhi0xF4));
+            }
+            //F6.缁х數鍣�2鎶ヨ璺濈2
+            if (textFields.length > 13 && result.dizhi0xF6 != null) {
+                textFields[13].setText(String.valueOf(result.dizhi0xF6));
+            }
+            //F8.缁х數鍣�2鎶ヨ璺濈3
+            if (textFields.length > 14 && result.dizhi0xF8 != null) {
+                textFields[14].setText(String.valueOf(result.dizhi0xF8));
+            }
+        } catch (Exception e) {
+            System.err.println("Error updating AntiCollisionPanel fields: " + e.getMessage());
+            e.printStackTrace();
+        }
+        // 鍙噸鏂伴獙璇佸拰閲嶇粯缁х數鍣ㄩ潰鏉�
+        relayPanel.revalidate();
+        relayPanel.repaint();
+    }
+
     public String getdizhi0x14() {
         return textFields.length > 0 ? textFields[0].getText() : "";
-    }//继电器1报警距离1
+    }//缁х數鍣�1鎶ヨ璺濈1
 
     public String getdizhi0x16() {
         return textFields.length > 1 ? textFields[1].getText() : "";
-    }//继电器1报警距离2
+    }//缁х數鍣�1鎶ヨ璺濈2
 
     public String getdizhi0x18() {
         return textFields.length > 2 ? textFields[2].getText() : "";
-    }//继电器1报警距离3
+    }//缁х數鍣�1鎶ヨ璺濈3
 
     public String getdizhi0x20() {
         return textFields.length > 3 ? textFields[3].getText() : "";
-    }//Modbus地址
+    }//Modbus鍦板潃
 
     public String getdizhi0x4A() {
         return textFields.length > 4 ? textFields[4].getText() : "";
-    }//白名单起始
+    }//鐧藉悕鍗曡捣濮�
 
     public String getdizhi0x4C() {
         return textFields.length > 5 ? textFields[5].getText() : "";
-    }//白名单结束
+    }//鐧藉悕鍗曠粨鏉�
+
+    public String getdizhi0x4E() {
+        return dizhi0x4E;
+    }//
+
+    public void setDizhi0x4E(String dizhi0x4E) {
+        this.dizhi0x4E = dizhi0x4E;
+    }
 
     public String getdizhi0x50() {
         return textFields.length > 6 ? textFields[6].getText() : "";
-    }//继电器持续时间
+    }//缁х數鍣ㄦ寔缁椂闂�
 
     public String getdizhi0x52() {
         return textFields.length > 7 ? textFields[7].getText() : "";
-    }//测距输出格式
+    }//娴嬭窛杈撳嚭鏍煎紡
 
     public String getdizhi0x54() {
         return textFields.length > 8 ? textFields[8].getText() : "";
-    }//天线电缆长度
+    }//澶╃嚎鐢电紗闀垮害
 
     public String getdizhi0x58() {
         return textFields.length > 9 ? textFields[9].getText() : "";
-    }//馈线长度
+    }//棣堢嚎闀垮害
 
     public String getdizhi0xF0() {
         return textFields.length > 10 ? textFields[10].getText() : "";
-    }//继电器1控制
+    }//缁х數鍣�1鎺у埗
 
     public String getdizhi0xF2() {
         return textFields.length > 11 ? textFields[11].getText() : "";
-    }//继电器2控制
+    }//缁х數鍣�2鎺у埗
 
     public String getdizhi0xF4() {
         return textFields.length > 12 ? textFields[12].getText() : "";
-    }//继电器2报警距离1
+    }//缁х數鍣�2鎶ヨ璺濈1
 
     public String getdizhi0xF6() {
         return textFields.length > 13 ? textFields[13].getText() : "";
-    }//继电器2报警距离2
+    }//缁х數鍣�2鎶ヨ璺濈2
 
     public String getdizhi0xF8() {
         return textFields.length > 14 ? textFields[14].getText() : "";
-    }//继电器2报警距离3
+    }//缁х數鍣�2鎶ヨ璺濈3
 }
\ No newline at end of file

--
Gitblit v1.10.0