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<Mapdata> maps = Dell_Map.getAllMaps();
|
|
// ±éÀúµØÍ¼Êý¾Ý²¢Ìí¼Óµ½±í¸ñ
|
for (Mapdata map : maps) {
|
Vector<Object> 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<Mapdata> maps = Dell_Map.getAllMaps();
|
|
// ±éÀúµØÍ¼Êý¾Ý²¢É¸Ñ¡Æ¥ÅäÏî
|
for (Mapdata map : maps) {
|
if (map.getMapName().toLowerCase().contains(keyword.toLowerCase())) {
|
Vector<Object> 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());
|
}
|
}
|
}
|
}
|
|
}
|