package PublicPannel;
|
import javax.swing.*;
|
|
import home.MainFrame;
|
import jiexi.DellTag55AA03;
|
|
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;
|
initializeUI();
|
}
|
|
private void initializeUI() {
|
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[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));
|
|
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[][] 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 < 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
|
}
|
|
if (textFields.length > 1 && result.dizhi0x16 != null) {
|
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));
|
}
|
|
//20.Modbus地址
|
if (textFields.length > 3 && result.dizhi0x20 != null) {
|
textFields[3].setText(String.valueOf(result.dizhi0x20));
|
}
|
//4A.白名单起始
|
if (textFields.length > 4 && result.dizhi0x4A != null) {
|
textFields[4].setText(String.valueOf(result.dizhi0x4A));
|
}
|
//4C.白名单结束
|
if (textFields.length > 5 && result.dizhi0x4C != null) {
|
textFields[5].setText(String.valueOf(result.dizhi0x4C));
|
}
|
//4E.白名单结束
|
setDizhi0x4E( String.valueOf(result.dizhi0x4E));
|
|
//50.继电器持续时间
|
if (textFields.length > 6 ) {
|
textFields[6].setText(String.valueOf(result.dizhi0x50));
|
}
|
//52.测距输出格式
|
if (textFields.length > 7 && result.dizhi0x52 != null) {
|
textFields[7].setText(String.valueOf(result.dizhi0x52));
|
}
|
|
//54.天线电缆长度
|
if (textFields.length > 8 && result.dizhi0x54 != null) {
|
textFields[8].setText(String.valueOf(result.dizhi0x54));
|
}
|
//58.馈线长度
|
if (textFields.length > 9 ) {
|
textFields[9].setText(String.valueOf(result.dizhi0x58));
|
}
|
} catch (Exception e) {
|
System.err.println("Error updating AntiCollisionPanel fields: " + e.getMessage());
|
e.printStackTrace();
|
}
|
|
// 只重新验证和重绘基础面板
|
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
|
|
public String getdizhi0x16() {
|
return textFields.length > 1 ? textFields[1].getText() : "";
|
}//继电器1报警距离2
|
|
public String getdizhi0x18() {
|
return textFields.length > 2 ? textFields[2].getText() : "";
|
}//继电器1报警距离3
|
|
public String getdizhi0x20() {
|
return textFields.length > 3 ? textFields[3].getText() : "";
|
}//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控制
|
|
public String getdizhi0xF2() {
|
return textFields.length > 11 ? textFields[11].getText() : "";
|
}//继电器2控制
|
|
public String getdizhi0xF4() {
|
return textFields.length > 12 ? textFields[12].getText() : "";
|
}//继电器2报警距离1
|
|
public String getdizhi0xF6() {
|
return textFields.length > 13 ? textFields[13].getText() : "";
|
}//继电器2报警距离2
|
|
public String getdizhi0xF8() {
|
return textFields.length > 14 ? textFields[14].getText() : "";
|
}//继电器2报警距离3
|
}
|