| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | 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"}, |
| | |
| | | {"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"}, |
| | |
| | | {"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)); |
| | |
| | | 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"}, |
| | |
| | | {"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"}, |
| | |
| | | {"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 |
| | | } |