zsh_root
2025-12-10 8d662de2fd262b3a485f16e197cb4d0ca2a61cdf
src/PublicPannel/AntiCollisionPanel.java
@@ -7,13 +7,14 @@
import java.awt.*;
public class AntiCollisionPanel extends JPanel {
    /**
    *
    */
   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;
@@ -21,10 +22,10 @@
    }
    
    private void initializeUI() {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        setLayout(new BorderLayout(0, 10));
        
        // 氝樓滅袉統杅砐
        String[][] parameters = {
        // 基本参数配置
        String[][] basicParameters = {
            {"14.", "relay1.alarm.distance1"},
            {"16.", "relay1.alarm.distance2"},
            {"18.", "relay1.alarm.distance3"},
@@ -35,6 +36,51 @@
            {"52.", "ranging.output.format"},
            {"54.", "antenna.cable.length"},
            {"58.", "feedline.length"},
        };
        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"},
@@ -42,16 +88,22 @@
            {"F8.", "relay2.alarm.distance3"},            
        };
        
        labels = new JLabel[parameters.length];
        textFields = new JTextField[parameters.length];
        // 创建参数面板
        JPanel relayParamsPanel = new JPanel();
        relayParamsPanel.setLayout(new BoxLayout(relayParamsPanel, BoxLayout.Y_AXIS));
        
        for (int i = 0; i < parameters.length; i++) {
            addParameterField(this, parameters[i][0], parameters[i][1], i);
        // 添加继电器参数到专用面板
        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));
@@ -62,14 +114,16 @@
        paramPanel.add(labels[index]);
        paramPanel.add(textFields[index]);
        
        // 氝樓潔擒
        // 设置固定高度
        paramPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 35));
        panel.add(paramPanel);
    }
    
    public void updateLanguage() {
        // 載陔垀衄梓ワ腔恅掛
        String[][] parameters = {
        // 基本参数
        String[][] basicParameters = {
            {"14.", "relay1.alarm.distance1"},
            {"16.", "relay1.alarm.distance2"},
            {"18.", "relay1.alarm.distance3"},
@@ -80,6 +134,15 @@
            {"52.", "ranging.output.format"},
            {"54.", "antenna.cable.length"},
            {"58.", "feedline.length"},
        };
        // 更新基本参数标签
        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"},
@@ -87,159 +150,199 @@
            {"F8.", "relay2.alarm.distance3"},            
        };
        
        for (int i = 0; i < parameters.length && i < labels.length; i++) {
            labels[i].setText(parameters[i][0] + " " + mainFrame.getString(parameters[i][1]));
        // 更新继电器参数标签
        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
            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)); 
            }
          //4A.白名单起始
            //4A.白名单起始
            if (textFields.length > 4 && result.dizhi0x4A != null) {
                textFields[4].setText(String.valueOf(result.dizhi0x4A)); 
            }
          //4C.白名单结束
            //4C.白名单结束
            if (textFields.length > 5 && result.dizhi0x4C != null) {
                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)); 
            }
          //52.测距输出格式
            //52.测距输出格式
            if (textFields.length > 7 && result.dizhi0x52 != null) {
                textFields[7].setText(String.valueOf(result.dizhi0x52)); 
            }
          //54.天线电缆长度
            //54.天线电缆长度
            if (textFields.length > 8 && result.dizhi0x54 != null) {
                textFields[8].setText(String.valueOf(result.dizhi0x54)); 
            }
          //58.馈线长度
            //58.馈线长度
            if (textFields.length > 9 ) {
                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
}