package dell_system; import javax.swing.*; import javax.swing.table.DefaultTableModel; import dell_map.AddEditMapDialog; import dell_map.Dell_Map; import java.awt.*; import java.io.File; import java.sql.SQLException; import java.util.List; import java.util.ResourceBundle; import java.util.Vector; import publicsWay.TableUtils; import targets.Mapdata; // µØÍ¼¹ÜÀíÃæ°åÀà @SuppressWarnings("serial") public class MapManagementPanel extends JPanel { // ×é¼þÉùÃ÷ private JTextField searchField; // ËÑË÷Îı¾¿ò private JButton searchButton; // ËÑË÷°´Å¥ private JButton addButton; // Ìí¼Ó°´Å¥ private JButton editButton; // ±à¼­°´Å¥ private JButton deleteButton; // ɾ³ý°´Å¥ private JButton refreshButton; // ˢа´Å¥ private JTable mapTable; // µØÍ¼Êý¾Ý±í¸ñ private DefaultTableModel tableModel; // ±í¸ñÄ£ÐÍ private JLabel statusLabel; // ״̬±êÇ© // ×ÊÔ´¼üÖµ³£Á¿ private static final String TITLE_KEY = "map.management.title"; private static final String SEARCH_KEY = "map.management.search"; private static final String ADD_KEY = "map.management.add"; private static final String EDIT_KEY = "map.management.edit"; private static final String DELETE_KEY = "map.management.delete"; private static final String REFRESH_KEY = "map.management.refresh"; private static final String COL_ID_KEY = "map.management.column.id"; private static final String COL_MAP_NAME_KEY = "map.management.column.mapName"; private static final String COL_LAYER_KEY = "map.management.column.layer"; private static final String COL_X_REAL_LENGTH_KEY = "map.management.column.xRealLength"; private static final String COL_Y_REAL_LENGTH_KEY = "map.management.column.yRealLength"; private static final String COL_X0_COORDINATE_KEY = "map.management.column.x0Coordinate"; private static final String COL_Y0_COORDINATE_KEY = "map.management.column.y0Coordinate"; private static final String COL_X_PIXELS_KEY = "map.management.column.xPixels"; private static final String COL_Y_PIXELS_KEY = "map.management.column.yPixels"; private static final String COL_POINT_A_KEY = "map.management.column.pointA"; private static final String COL_POINT_B_KEY = "map.management.column.pointB"; private static final String COL_COMPANY_KEY = "map.management.column.company"; private static final String COL_ADD_TIME_KEY = "map.management.column.addTime"; private static final String STATUS_READY_KEY = "map.management.status.ready"; // ×ÊÔ´°ü³ÉÔ±±äÁ¿ private ResourceBundle messages; // ¹¹Ôì·½·¨ public MapManagementPanel(ResourceBundle messages) { this.messages = messages; // ±£´æ×ÊÔ´°üÒýÓà setLayout(new BorderLayout()); initUI(); // ³õʼ»¯UI loadMapData(); // ¼ÓÔØµØÍ¼Êý¾Ý updateStatus(getResourceString(STATUS_READY_KEY)); // ¸üÐÂ״̬ } // ³õʼ»¯UI×é¼þ private void initUI() { // ´´½¨¶¥²¿Ãæ°å£¨ËÑË÷ÇøÓò£© JPanel topPanel = new JPanel(new BorderLayout()); topPanel.setBorder(BorderFactory.createTitledBorder(getResourceString(TITLE_KEY))); // ËÑË÷Ãæ°å JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0)); searchField = new JTextField(20); searchPanel.add(new JLabel(getResourceString(COL_MAP_NAME_KEY) + ":")); searchPanel.add(searchField); // ËÑË÷°´Å¥ searchButton = new JButton(getResourceString(SEARCH_KEY)); searchButton.addActionListener(e -> searchMaps()); // Ìí¼ÓËÑË÷ʼþ¼àÌý searchPanel.add(searchButton); // ²Ù×÷°´Å¥Ãæ°å JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0)); // Ìí¼Ó°´Å¥ addButton = new JButton(getResourceString(ADD_KEY)); addButton.addActionListener(e -> showAddDialog()); // Ìí¼ÓÏÔʾ¶Ô»°¿òʼþ actionPanel.add(addButton); // ±à¼­°´Å¥ editButton = new JButton(getResourceString(EDIT_KEY)); editButton.addActionListener(e -> showEditDialog()); // Ìí¼Ó±à¼­Ê¼þ¼àÌý actionPanel.add(editButton); // ɾ³ý°´Å¥ deleteButton = new JButton(getResourceString(DELETE_KEY)); deleteButton.addActionListener(e -> deleteSelectedMap()); // Ìí¼Óɾ³ýʼþ¼àÌý actionPanel.add(deleteButton); // ˢа´Å¥ refreshButton = new JButton(getResourceString(REFRESH_KEY)); refreshButton.addActionListener(e -> refreshData()); // Ìí¼ÓË¢ÐÂʼþ¼àÌý actionPanel.add(refreshButton); // ½«ËÑË÷Ãæ°åºÍ²Ù×÷°´Å¥Ãæ°åÌí¼Óµ½¶¥²¿ÈÝÆ÷ topPanel.add(searchPanel, BorderLayout.CENTER); topPanel.add(actionPanel, BorderLayout.EAST); add(topPanel, BorderLayout.NORTH); // ´´½¨±í¸ñÄ£ÐÍ - Ìí¼ÓÐÂÁÐ String[] columnNames = { getResourceString(COL_ID_KEY), getResourceString(COL_MAP_NAME_KEY), getResourceString(COL_LAYER_KEY), getResourceString(COL_X_REAL_LENGTH_KEY), getResourceString(COL_Y_REAL_LENGTH_KEY), getResourceString(COL_X0_COORDINATE_KEY), getResourceString(COL_Y0_COORDINATE_KEY), getResourceString(COL_X_PIXELS_KEY), getResourceString(COL_Y_PIXELS_KEY), getResourceString(COL_POINT_A_KEY), getResourceString(COL_POINT_B_KEY), getResourceString(COL_COMPANY_KEY), getResourceString(COL_ADD_TIME_KEY) }; tableModel = new DefaultTableModel(columnNames, 0) { @Override public boolean isCellEditable(int row, int column) { return false; // ËùÓе¥Ôª¸ñ²»¿É±à¼­ } }; /// ʹÓù¤¾ßÀà´´½¨±í¸ñ mapTable = TableUtils.createCommonTable(columnNames); tableModel = (DefaultTableModel) mapTable.getModel(); // »ñÈ¡±í¸ñÄ£ÐÍ // Ìí¼Ó±í¸ñµ½¹ö¶¯Ãæ°å JScrollPane scrollPane = new JScrollPane(mapTable); add(scrollPane, BorderLayout.CENTER); // ´´½¨×´Ì¬±êÇ© statusLabel = new JLabel(); add(statusLabel, BorderLayout.SOUTH); } // ¼ÓÔØµØÍ¼Êý¾Ý private void loadMapData() { // Çå¿Õ±í¸ñ tableModel.setRowCount(0); // »ñÈ¡ËùÓеØÍ¼Êý¾Ý List maps = Dell_Map.getAllMaps(); // ±éÀúµØÍ¼Êý¾Ý²¢Ìí¼Óµ½±í¸ñ for (Mapdata map : maps) { Vector row = new Vector<>(); row.add(map.getId()); row.add(map.getMapName()); row.add(map.getLocatedLayer()); row.add(map.getActualXLength()); row.add(map.getActualYLength()); row.add(map.getX0Coordinate()); row.add(map.getY0Coordinate()); row.add(map.getXPixels()); row.add(map.getYPixels()); row.add(map.getPointALatlngXyCoordinate()); row.add(map.getPointBLatlngXyCoordinate()); row.add(map.getCompany()); row.add(map.getAddedTime()); tableModel.addRow(row); // Ìí¼ÓÐе½±í¸ñÄ£ÐÍ } } // ËÑË÷µØÍ¼ private void searchMaps() { // »ñÈ¡ËÑË÷¹Ø¼ü×Ö String keyword = searchField.getText().trim(); // Çå¿Õ±í¸ñ tableModel.setRowCount(0); // »ñÈ¡ËùÓеØÍ¼Êý¾Ý List maps = Dell_Map.getAllMaps(); // ±éÀúµØÍ¼Êý¾Ý²¢É¸Ñ¡Æ¥ÅäÏî for (Mapdata map : maps) { if (map.getMapName().toLowerCase().contains(keyword.toLowerCase())) { Vector row = new Vector<>(); row.add(map.getId()); row.add(map.getMapName()); row.add(map.getLocatedLayer()); row.add(map.getActualXLength()); row.add(map.getActualYLength()); row.add(map.getX0Coordinate()); row.add(map.getY0Coordinate()); row.add(map.getXPixels()); row.add(map.getYPixels()); row.add(map.getPointALatlngXyCoordinate()); row.add(map.getPointBLatlngXyCoordinate()); row.add(map.getCompany()); row.add(map.getAddedTime()); tableModel.addRow(row); // Ìí¼ÓÆ¥ÅäÐе½±í¸ñ } } } // ÏÔʾÌí¼Ó¶Ô»°¿ò private void showAddDialog() { // ´´½¨Ìí¼ÓµØÍ¼¶Ô»°¿ò AddEditMapDialog dialog = new AddEditMapDialog( (JFrame) SwingUtilities.getWindowAncestor(this), getResourceString("map.dialog.add.title"), true, null, messages ); dialog.setVisible(true); // ÏÔʾ¶Ô»°¿ò // ¶Ô»°¿ò¹Ø±ÕºóË¢ÐÂÊý¾Ý if (dialog.isSaved()) { refreshData(); // Èç¹û±£´æÔòˢР} } // ÏÔʾ±à¼­¶Ô»°¿ò private void showEditDialog() { // »ñȡѡÖеÄÐÐ int selectedRow = mapTable.getSelectedRow(); if (selectedRow == -1) { JOptionPane.showMessageDialog(this, "ÇëÏÈÑ¡ÔñÒªÐ޸ĵĵØÍ¼", "Ìáʾ", JOptionPane.WARNING_MESSAGE); // ÏÔʾ¾¯¸æ return; } // »ñÈ¡µØÍ¼ID int mapId = (int) mapTable.getValueAt(selectedRow, 0); try { // »ñÈ¡µØÍ¼Êý¾Ý Mapdata selectedMap = Dell_Map.getMapById(mapId); if (selectedMap != null) { // ´´½¨±à¼­µØÍ¼¶Ô»°¿ò AddEditMapDialog dialog = new AddEditMapDialog( (JFrame) SwingUtilities.getWindowAncestor(this), getResourceString("map.dialog.edit.title"), true, selectedMap, messages ); dialog.setVisible(true); // ÏÔʾ¶Ô»°¿ò // ¶Ô»°¿ò¹Ø±ÕºóË¢ÐÂÊý¾Ý if (dialog.isSaved()) { refreshData(); // Èç¹û±£´æÔòˢР} } } catch (SQLException e) { // ´¦ÀíÊý¾Ý¿âÒì³£ e.printStackTrace(); JOptionPane.showMessageDialog(this, "»ñÈ¡µØÍ¼Êý¾Ýʧ°Ü: " + e.getMessage(), "´íÎó", JOptionPane.ERROR_MESSAGE); // ÏÔʾ´íÎó } } private void deleteSelectedMap() { int selectedRow = mapTable.getSelectedRow(); if (selectedRow == -1) { JOptionPane.showMessageDialog(this, "ÇëÏÈÑ¡ÔñҪɾ³ýµÄµØÍ¼", "Ìáʾ", JOptionPane.WARNING_MESSAGE); return; } int confirm = JOptionPane.showConfirmDialog(this, "È·¶¨ÒªÉ¾³ýÑ¡ÖеĵØÍ¼Âð£¿", "È·ÈÏɾ³ý", JOptionPane.YES_NO_OPTION); if (confirm == JOptionPane.YES_OPTION) { int mapId = (int) mapTable.getValueAt(selectedRow, 0); String mapName = (String) mapTable.getValueAt(selectedRow, 1); // »ñÈ¡µØÍ¼Ãû³Æ try { Dell_Map.deleteMap(mapId); deleteMapImageFile(mapName); // ɾ³ýͼƬÎļþ refreshData(); updateStatus("µØÍ¼É¾³ý³É¹¦"); } catch (SQLException e) { e.printStackTrace(); JOptionPane.showMessageDialog(this, "ɾ³ýµØÍ¼Ê§°Ü: " + e.getMessage(), "´íÎó", JOptionPane.ERROR_MESSAGE); } } } // Ë¢ÐÂÊý¾Ý private void refreshData() { // ¼ÓÔØµØÍ¼Êý¾Ý loadMapData(); // Çå¿ÕËÑË÷¿ò searchField.setText(""); // ¸üÐÂ״̬ updateStatus(getResourceString(STATUS_READY_KEY)); } // ¸üÐÂ״̬À¸ private void updateStatus(String message) { statusLabel.setText(message); // ÉèÖÃ״̬Îı¾ } // »ñÈ¡×ÊÔ´×Ö·û´® private String getResourceString(String key) { return messages.getString(key); // ´Ó×ÊÔ´°ü»ñÈ¡×Ö·û´® } // ÐÂÔö·½·¨£ºÉ¾³ýµØÍ¼Í¼Æ¬Îļþ private void deleteMapImageFile(String mapName) { File imageDir = new File("systemfile/imagemap"); if (!imageDir.exists()) return; // Ö§³ÖµÄͼƬÀ©Õ¹Ãû String[] extensions = {".jpg", ".jpeg", ".png"}; for (String ext : extensions) { File imageFile = new File(imageDir, mapName + ext); if (imageFile.exists()) { if (imageFile.delete()) { System.out.println("ɾ³ýͼƬ³É¹¦: " + imageFile.getAbsolutePath()); } else { System.err.println("ɾ³ýͼƬʧ°Ü: " + imageFile.getAbsolutePath()); } } } } }