| | |
| | | |
| | | import databases.DBConnector; |
| | | import dell_targets.Dell_BaseStation; |
| | | |
| | | import publicsWay.ButtonUtils; |
| | | import publicsWay.TableUtils; |
| | | import javax.swing.*; |
| | | import javax.swing.border.EmptyBorder; |
| | | import javax.swing.table.*; |
| | | import java.awt.*; |
| | | import java.awt.event.*; |
| | | import java.sql.SQLException; |
| | | import java.util.*; |
| | | import java.util.List; |
| | |
| | | setLayout(new BorderLayout()); |
| | | setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); |
| | | |
| | | // 创建搜索面板 |
| | | JPanel searchPanel = new JPanel(new BorderLayout(5, 5)); |
| | | searchPanel.setBorder(BorderFactory.createTitledBorder(getMessage("SEARCH"))); |
| | | // 顶部操作面板 |
| | | JPanel topPanel = new JPanel(new BorderLayout(5, 5)); |
| | | topPanel.setBorder(BorderFactory.createTitledBorder(messages.getString("QUICK_OPERATION"))); |
| | | |
| | | // 创建搜索组件 |
| | | // 搜索面板 |
| | | JPanel searchInputPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
| | | JLabel searchLabel = new JLabel(messages.getString("BASE_STATION_ID") + ":"); |
| | | searchField = new JTextField(15); |
| | | JButton searchButton = new JButton(getMessage("SEARCH")); |
| | | JButton refreshButton = new JButton(getMessage("REFRESH")); |
| | | JButton addButton = new JButton(getMessage("ADD")); |
| | | JButton editButton = new JButton(getMessage("EDIT")); |
| | | JButton deleteButton = new JButton(getMessage("DELETE")); |
| | | refreshButton.addActionListener(e -> loadBaseStationData()); |
| | | |
| | | JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5)); |
| | | buttonPanel.add(searchButton); |
| | | buttonPanel.add(refreshButton); |
| | | buttonPanel.add(addButton); |
| | | buttonPanel.add(editButton); |
| | | buttonPanel.add(deleteButton); |
| | | // 使用ButtonUtils创建蓝色按钮 |
| | | JButton searchButton = ButtonUtils.createBlueButton(messages.getString("SEARCH")); |
| | | JButton resetButton = ButtonUtils.createBlueButton(messages.getString("RESET")); |
| | | JButton refreshButton = ButtonUtils.createBlueButton(messages.getString("REFRESH")); |
| | | JButton addButton = ButtonUtils.createBlueButton(messages.getString("ADD")); |
| | | JButton editButton = ButtonUtils.createBlueButton(messages.getString("EDIT")); |
| | | JButton deleteButton = ButtonUtils.createBlueButton(messages.getString("DELETE")); |
| | | |
| | | searchPanel.add(searchField, BorderLayout.CENTER); |
| | | searchPanel.add(buttonPanel, BorderLayout.EAST); |
| | | searchInputPanel.add(searchLabel); |
| | | searchInputPanel.add(searchField); |
| | | searchInputPanel.add(searchButton); |
| | | searchInputPanel.add(resetButton); |
| | | searchInputPanel.add(refreshButton); |
| | | |
| | | // 添加按钮事件监听器 |
| | | addButton.addActionListener(e -> addNewBaseStation()); |
| | | editButton.addActionListener(e -> editSelectedBaseStation()); |
| | | deleteButton.addActionListener(e -> deleteSelectedBaseStations()); |
| | | searchButton.addActionListener(new SearchAction()); |
| | | // 操作按钮面板 |
| | | JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0)); |
| | | actionPanel.add(addButton); |
| | | actionPanel.add(editButton); |
| | | actionPanel.add(deleteButton); |
| | | |
| | | // 将搜索面板和操作按钮面板放在一行 |
| | | JPanel rowPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 5)); |
| | | rowPanel.add(searchInputPanel); |
| | | rowPanel.add(actionPanel); |
| | | |
| | | topPanel.add(rowPanel, BorderLayout.CENTER); |
| | | |
| | | // 创建表格列名 |
| | | String[] columnNames = { |
| | | getMessage("INDEX"), |
| | | getMessage("BASE_STATION_ID"), |
| | | getMessage("BASE_STATION_STATUS"), |
| | | getMessage("X_COORD"), |
| | | getMessage("Y_COORD"), |
| | | getMessage("Z_COORD"), |
| | | getMessage("LAYER"), |
| | | getMessage("GROUP"), |
| | | getMessage("PORT"), |
| | | getMessage("FIRMWARE_VERSION"), |
| | | getMessage("ONLINE_TIME"), |
| | | getMessage("COMPANY") |
| | | messages.getString("INDEX"), |
| | | messages.getString("BASE_STATION_ID"), |
| | | messages.getString("BASE_STATION_STATUS"), |
| | | messages.getString("X_COORD"), |
| | | messages.getString("Y_COORD"), |
| | | messages.getString("Z_COORD"), |
| | | messages.getString("LAYER"), |
| | | messages.getString("GROUP"), |
| | | messages.getString("PORT"), |
| | | messages.getString("FIRMWARE_VERSION"), |
| | | messages.getString("ONLINE_TIME"), |
| | | messages.getString("COMPANY") |
| | | }; |
| | | |
| | | // 创建表格模型 |
| | |
| | | } |
| | | }; |
| | | |
| | | // 创建表格 |
| | | // 创建表格 - 使用TableUtils中的方法 |
| | | baseStationTable = new JTable(tableModel); |
| | | TableUtils.setupTableStyle(baseStationTable); |
| | | TableUtils.setupTableHeaderStyle(baseStationTable); |
| | | baseStationTable.setAutoCreateRowSorter(true); |
| | | baseStationTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); |
| | | |
| | | // 设置列宽 |
| | | TableColumnModel columnModel = baseStationTable.getColumnModel(); |
| | | columnModel.getColumn(0).setPreferredWidth(30); // 序号 |
| | | columnModel.getColumn(0).setPreferredWidth(30); // 索引 |
| | | columnModel.getColumn(1).setPreferredWidth(100); // 基站编号 |
| | | columnModel.getColumn(2).setPreferredWidth(70); // ״̬ |
| | | columnModel.getColumn(3).setPreferredWidth(70); // X坐标 |
| | |
| | | columnModel.getColumn(10).setPreferredWidth(120); // 上线时间 |
| | | columnModel.getColumn(11).setPreferredWidth(100); // 所属公司 |
| | | |
| | | // 设置表头样式 |
| | | JTableHeader header = baseStationTable.getTableHeader(); |
| | | // 设置表头左对齐 |
| | | header.setDefaultRenderer(new DefaultTableCellRenderer() { |
| | | @Override |
| | | public Component getTableCellRendererComponent(JTable table, Object value, |
| | | boolean isSelected, boolean hasFocus, int row, int column) { |
| | | super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); |
| | | setHorizontalAlignment(SwingConstants.LEFT); |
| | | setBackground(Color.GRAY); |
| | | setForeground(Color.WHITE); |
| | | setFont(getFont().deriveFont(Font.BOLD)); |
| | | return this; |
| | | // 应用单元格渲染器到所有列 - 使用TableUtils中的方法 |
| | | DefaultTableCellRenderer cellRenderer = TableUtils.createCenteredCellRenderer(); |
| | | for (int i = 0; i < baseStationTable.getColumnCount(); i++) { |
| | | baseStationTable.getColumnModel().getColumn(i).setCellRenderer(cellRenderer); |
| | | } |
| | | }); |
| | | |
| | | JScrollPane scrollPane = new JScrollPane(baseStationTable); |
| | | scrollPane.setPreferredSize(new Dimension(1200, 500)); |
| | | scrollPane.setBorder(BorderFactory.createEmptyBorder()); // 移除滚动面板边框 |
| | | |
| | | // 添加组件 |
| | | add(searchPanel, BorderLayout.NORTH); |
| | | add(topPanel, BorderLayout.NORTH); |
| | | add(scrollPane, BorderLayout.CENTER); |
| | | |
| | | // 加载数据 |
| | | loadBaseStationData(); |
| | | |
| | | // 添加事件监听器 |
| | | searchButton.addActionListener(e -> searchBaseStations()); |
| | | resetButton.addActionListener(e -> resetSearch()); |
| | | refreshButton.addActionListener(e -> loadBaseStationData()); |
| | | addButton.addActionListener(e -> addNewBaseStation()); |
| | | editButton.addActionListener(e -> editSelectedBaseStation()); |
| | | deleteButton.addActionListener(e -> deleteSelectedBaseStations()); |
| | | } |
| | | |
| | | private void loadBaseStationData() { |
| | |
| | | bs.getCompany() |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 搜索基站 |
| | | private void searchBaseStations() { |
| | | String keyword = searchField.getText().trim(); |
| | | if (keyword.isEmpty()) { |
| | | updateTable(allBaseStations); |
| | | return; |
| | | } |
| | | |
| | | List<LocationBaseStation> filtered = new ArrayList<>(); |
| | | for (LocationBaseStation bs : allBaseStations) { |
| | | if ((bs.getCode() != null && bs.getCode().toLowerCase().contains(keyword.toLowerCase())) || |
| | | (bs.getCompany() != null && bs.getCompany().toLowerCase().contains(keyword.toLowerCase()))) { |
| | | filtered.add(bs); |
| | | } |
| | | } |
| | | |
| | | if (filtered.isEmpty()) { |
| | | JOptionPane.showMessageDialog(this, getMessage("SEARCH_NO_RESULTS"), |
| | | getMessage("INFO"), JOptionPane.INFORMATION_MESSAGE); |
| | | } |
| | | |
| | | updateTable(filtered); |
| | | } |
| | | |
| | | // 重置搜索 |
| | | private void resetSearch() { |
| | | searchField.setText(""); |
| | | updateTable(allBaseStations); |
| | | } |
| | | |
| | | // 添加新基站 |
| | |
| | | return false; |
| | | } |
| | | |
| | | // HEX格式验证(0-9, A-F) |
| | | // HEX格式验证(0-9, A-F) |
| | | if (!Pattern.matches("[0-9A-Fa-f]+", bs.getCode())) { |
| | | JOptionPane.showMessageDialog(this, getMessage("INVALID_HEX_FORMAT"), |
| | | getMessage("ERROR"), JOptionPane.ERROR_MESSAGE); |
| | |
| | | return result > 0; |
| | | } |
| | | |
| | | // 搜索功能 |
| | | private class SearchAction implements ActionListener { |
| | | @Override |
| | | public void actionPerformed(ActionEvent e) { |
| | | String keyword = searchField.getText().trim(); |
| | | if (keyword.isEmpty()) { |
| | | updateTable(allBaseStations); |
| | | return; |
| | | } |
| | | |
| | | List<LocationBaseStation> filteredList = new ArrayList<>(); |
| | | for (LocationBaseStation bs : allBaseStations) { |
| | | if (matchesKeyword(bs, keyword)) { |
| | | filteredList.add(bs); |
| | | } |
| | | } |
| | | |
| | | updateTable(filteredList); |
| | | } |
| | | |
| | | private boolean matchesKeyword(LocationBaseStation bs, String keyword) { |
| | | return (bs.getCode() != null && bs.getCode().contains(keyword)) || |
| | | (bs.getCompany() != null && bs.getCompany().contains(keyword)); |
| | | } |
| | | } |
| | | |
| | | private String getMessage(String key) { |
| | | try { |
| | | return messages.getString(key); |
| | |
| | | |
| | | // 按钮面板 |
| | | JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); |
| | | JButton okButton = new JButton(messages.getString("OK")); |
| | | JButton cancelButton = new JButton(messages.getString("CANCEL")); |
| | | JButton okButton = ButtonUtils.createBlueButton(messages.getString("OK")); |
| | | JButton cancelButton = ButtonUtils.createBlueButton(messages.getString("CANCEL")); |
| | | |
| | | okButton.addActionListener(e -> { |
| | | confirmed = true; |