package home;
|
|
import javax.swing.*;
|
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.TableColumn;
|
import java.awt.*;
|
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseEvent;
|
|
public class ParameterTablePanel extends JPanel {
|
private static final long serialVersionUID = 1L;
|
private MainFrame mainFrame;
|
private JTable parameterTable;
|
private DefaultTableModel tableModel;
|
private JButton readBtn, saveBtn, restartBtn, resetBtn;
|
|
public ParameterTablePanel(MainFrame mainFrame) {
|
this.mainFrame = mainFrame;
|
initializeUI();
|
}
|
|
private void initializeUI() {
|
setLayout(new BorderLayout());
|
setBorder(BorderFactory.createTitledBorder(getString("base.parameters")));
|
|
// 创建表格列名
|
String[] columnNames = {
|
getString("parameter.name"),
|
getString("parameter.value")
|
};
|
|
// 创建表格模型,默认20行数据
|
tableModel = new DefaultTableModel(columnNames, 0) {
|
private static final long serialVersionUID = 1L;
|
|
@Override
|
public boolean isCellEditable(int row, int column) {
|
// 只有参数值列可编辑
|
return column == 1;
|
}
|
};
|
|
// 添加20行默认数据
|
for (int i = 1; i <= 20; i++) {
|
tableModel.addRow(new Object[]{
|
"第" + i + "行字符串",
|
""
|
});
|
}
|
|
parameterTable = new JTable(tableModel);
|
parameterTable.setRowHeight(25);
|
|
// 设置列宽
|
TableColumn column;
|
column = parameterTable.getColumnModel().getColumn(0);
|
column.setPreferredWidth(90); // 第1列宽90像素
|
|
column = parameterTable.getColumnModel().getColumn(1);
|
column.setPreferredWidth(100); // 第2列宽100像素
|
|
JScrollPane scrollPane = new JScrollPane(parameterTable);
|
|
// 创建按钮面板
|
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
|
readBtn = createStyledButton(getString("read.parameters"));
|
saveBtn = createStyledButton(getString("save.parameters"));
|
restartBtn = createStyledButton(getString("restart.device"));
|
resetBtn = createStyledButton(getString("reset.factory"));
|
|
buttonPanel.add(readBtn);
|
buttonPanel.add(saveBtn);
|
buttonPanel.add(restartBtn);
|
buttonPanel.add(resetBtn);
|
|
add(scrollPane, BorderLayout.CENTER);
|
add(buttonPanel, BorderLayout.SOUTH);
|
|
// 添加事件监听
|
setupEventListeners();
|
}
|
|
/**
|
* 创建样式按钮(参考SendPanel中的按钮设计)
|
* @param text 按钮文本
|
* @return 配置好样式的JButton
|
*/
|
private JButton createStyledButton(String text) {
|
JButton button = new JButton(text);
|
button.setBackground(new Color(0, 120, 215)); // 蓝色背景
|
button.setForeground(Color.WHITE); // 白色文字
|
button.setFocusPainted(false);
|
button.setOpaque(true);
|
button.setBorderPainted(false);
|
button.setFont(button.getFont().deriveFont(Font.BOLD)); // 加粗字体
|
|
// 设置固定高度
|
Dimension preferredSize = button.getPreferredSize();
|
Dimension newSize = new Dimension(preferredSize.width, 25);
|
button.setPreferredSize(newSize);
|
button.setMinimumSize(newSize);
|
button.setMaximumSize(newSize);
|
|
// 添加鼠标悬停效果
|
button.addMouseListener(new MouseAdapter() {
|
@Override
|
public void mouseEntered(MouseEvent e) {
|
button.setBackground(Color.GRAY); // 鼠标悬停时变为灰色
|
button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // 鼠标变为手型
|
}
|
|
@Override
|
public void mouseExited(MouseEvent e) {
|
button.setBackground(new Color(0, 120, 215)); // 鼠标离开时恢复蓝色
|
button.setCursor(Cursor.getDefaultCursor()); // 鼠标恢复默认形状
|
}
|
});
|
|
return button;
|
}
|
|
private void setupEventListeners() {
|
readBtn.addActionListener(e -> readParameters());
|
saveBtn.addActionListener(e -> saveParameters());
|
restartBtn.addActionListener(e -> restartDevice());
|
resetBtn.addActionListener(e -> resetFactory());
|
}
|
|
private void readParameters() {
|
// 读取参数逻辑
|
JOptionPane.showMessageDialog(this,
|
getString("read.parameters") + " - " + getString("function.not.implemented"),
|
getString("prompt"),
|
JOptionPane.INFORMATION_MESSAGE);
|
}
|
|
private void saveParameters() {
|
// 保存参数逻辑
|
StringBuilder savedData = new StringBuilder();
|
savedData.append("保存的参数:\n");
|
|
for (int i = 0; i < tableModel.getRowCount(); i++) {
|
String paramName = (String) tableModel.getValueAt(i, 0);
|
String paramValue = (String) tableModel.getValueAt(i, 1);
|
savedData.append(paramName).append(": ").append(paramValue).append("\n");
|
}
|
|
JOptionPane.showMessageDialog(this,
|
savedData.toString(),
|
getString("save.parameters"),
|
JOptionPane.INFORMATION_MESSAGE);
|
}
|
|
private void restartDevice() {
|
// 重启设备逻辑
|
int result = JOptionPane.showConfirmDialog(this,
|
getString("confirm.restart.device"),
|
getString("restart.device"),
|
JOptionPane.YES_NO_OPTION);
|
|
if (result == JOptionPane.YES_OPTION) {
|
JOptionPane.showMessageDialog(this,
|
getString("device.restarting"),
|
getString("prompt"),
|
JOptionPane.INFORMATION_MESSAGE);
|
}
|
}
|
|
private void resetFactory() {
|
// 恢复出厂设置逻辑
|
int result = JOptionPane.showConfirmDialog(this,
|
getString("confirm.reset.factory"),
|
getString("reset.factory"),
|
JOptionPane.YES_NO_OPTION,
|
JOptionPane.WARNING_MESSAGE);
|
|
if (result == JOptionPane.YES_OPTION) {
|
// 重置表格数据
|
for (int i = 0; i < tableModel.getRowCount(); i++) {
|
tableModel.setValueAt("", i, 1); // 清空参数值
|
}
|
|
JOptionPane.showMessageDialog(this,
|
getString("factory.reset.completed"),
|
getString("prompt"),
|
JOptionPane.INFORMATION_MESSAGE);
|
}
|
}
|
|
public void updateLanguage() {
|
// 更新边框标题
|
setBorder(BorderFactory.createTitledBorder(getString("base.parameters")));
|
|
// 更新按钮文本
|
readBtn.setText(getString("read.parameters"));
|
saveBtn.setText(getString("save.parameters"));
|
restartBtn.setText(getString("restart.device"));
|
resetBtn.setText(getString("reset.factory"));
|
|
// 更新表格列名
|
String[] columnNames = {
|
getString("parameter.name"),
|
getString("parameter.value")
|
};
|
tableModel.setColumnIdentifiers(columnNames);
|
|
revalidate();
|
repaint();
|
}
|
|
private String getString(String key) {
|
return mainFrame.getString(key);
|
}
|
|
/**
|
* 获取表格数据
|
* @return 包含所有行数据的二维数组
|
*/
|
public Object[][] getTableData() {
|
int rowCount = tableModel.getRowCount();
|
int colCount = tableModel.getColumnCount();
|
Object[][] data = new Object[rowCount][colCount];
|
|
for (int i = 0; i < rowCount; i++) {
|
for (int j = 0; j < colCount; j++) {
|
data[i][j] = tableModel.getValueAt(i, j);
|
}
|
}
|
return data;
|
}
|
|
/**
|
* 设置表格数据
|
* @param data 要设置的数据
|
*/
|
public void setTableData(Object[][] data) {
|
tableModel.setRowCount(0); // 清空现有数据
|
for (Object[] row : data) {
|
tableModel.addRow(row);
|
}
|
}
|
|
/**
|
* 获取指定行的数据
|
* @param row 行索引
|
* @return 该行的数据数组
|
*/
|
public Object[] getRowData(int row) {
|
if (row >= 0 && row < tableModel.getRowCount()) {
|
Object[] rowData = new Object[tableModel.getColumnCount()];
|
for (int i = 0; i < tableModel.getColumnCount(); i++) {
|
rowData[i] = tableModel.getValueAt(row, i);
|
}
|
return rowData;
|
}
|
return null;
|
}
|
|
/**
|
* 设置指定行的数据
|
* @param row 行索引
|
* @param rowData 行数据数组
|
*/
|
public void setRowData(int row, Object[] rowData) {
|
if (row >= 0 && row < tableModel.getRowCount() && rowData != null) {
|
for (int i = 0; i < Math.min(tableModel.getColumnCount(), rowData.length); i++) {
|
tableModel.setValueAt(rowData[i], row, i);
|
}
|
}
|
}
|
|
/**
|
* 获取表格行数
|
* @return 行数
|
*/
|
public int getRowCount() {
|
return tableModel.getRowCount();
|
}
|
|
/**
|
* 获取表格列数
|
* @return 列数
|
*/
|
public int getColumnCount() {
|
return tableModel.getColumnCount();
|
}
|
}
|