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(); } }