package dell_targets;
|
|
import targets.LocationTag;
|
import javax.swing.*;
|
import javax.swing.table.DefaultTableModel;
|
import java.awt.*;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.sql.SQLException;
|
import java.util.List;
|
import java.util.ResourceBundle;
|
|
public class TagManagementPanel extends JPanel {
|
private static final long serialVersionUID = 1L;
|
private JTable tagTable;
|
private DefaultTableModel tableModel;
|
private JTextField searchField;
|
private List<LocationTag> allTags;
|
private ResourceBundle messages;
|
|
public TagManagementPanel(ResourceBundle messages) {
|
this.messages = messages;
|
setLayout(new BorderLayout());
|
setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
|
|
// ´´½¨ËÑË÷Ãæ°å
|
JPanel searchPanel = new JPanel(new BorderLayout(5, 5));
|
searchPanel.setBorder(BorderFactory.createTitledBorder(messages.getString("SEARCH")));
|
|
// ´´½¨ËÑË÷Îı¾¿òºÍ°´Å¥
|
searchField = new JTextField(10); // Ëõ¶ÌËÑË÷Îı¾¿ò³¤¶È
|
JButton searchButton = new JButton(messages.getString("SEARCH"));
|
JButton refreshButton = new JButton(messages.getString("REFRESH")); // Ìí¼Óˢа´Å¥
|
refreshButton.addActionListener(e -> loadTagData()); // °ó¶¨Ë¢Ð¶¯×÷
|
|
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
|
buttonPanel.add(searchButton);
|
buttonPanel.add(refreshButton);
|
|
searchPanel.add(searchField, BorderLayout.CENTER);
|
searchPanel.add(buttonPanel, BorderLayout.EAST);
|
|
// ´´½¨²Ù×÷°´Å¥Ãæ°å
|
JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
|
JButton addButton = new JButton(messages.getString("ADD"));
|
JButton deleteButton = new JButton(messages.getString("DELETE"));
|
actionPanel.add(addButton);
|
actionPanel.add(deleteButton);
|
|
// ´´½¨±í¸ñ - °´ÕÕ±í5ÒªÇóÐÞ¸ÄÁÐÃû
|
String[] columnNames = {
|
messages.getString("INDEX"),
|
messages.getString("DEVICE_NUMBER"),
|
messages.getString("DEVICE_NAME"),
|
messages.getString("ONLINE_STATUS"),
|
messages.getString("DEVICE_TYPE"),
|
messages.getString("BATTERY_LEVEL"),
|
messages.getString("CARD_NUMBER"), // ¿¨ºÅ
|
messages.getString("ADDRESS_PORT"), // µØÖ·¶Ë¿Ú
|
messages.getString("DEVICE_VERSION"),
|
messages.getString("ONLINE_TIME"), // ÉÏÏßʱ¼ä
|
messages.getString("COMPANY")
|
};
|
|
tableModel = new DefaultTableModel(columnNames, 0) {
|
private static final long serialVersionUID = 1L;
|
|
@Override
|
public boolean isCellEditable(int row, int column) {
|
return false;
|
}
|
};
|
|
tagTable = new JTable(tableModel);
|
tagTable.setAutoCreateRowSorter(true);
|
tagTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
// ÉèÖÃÁпí
|
tagTable.getColumnModel().getColumn(0).setPreferredWidth(30);
|
tagTable.getColumnModel().getColumn(1).setPreferredWidth(100);
|
tagTable.getColumnModel().getColumn(2).setPreferredWidth(100);
|
tagTable.getColumnModel().getColumn(3).setPreferredWidth(70);
|
tagTable.getColumnModel().getColumn(4).setPreferredWidth(70);
|
tagTable.getColumnModel().getColumn(5).setPreferredWidth(70);
|
tagTable.getColumnModel().getColumn(6).setPreferredWidth(100); // ¿¨ºÅ
|
tagTable.getColumnModel().getColumn(7).setPreferredWidth(100); // µØÖ·¶Ë¿Ú
|
tagTable.getColumnModel().getColumn(8).setPreferredWidth(70);
|
tagTable.getColumnModel().getColumn(9).setPreferredWidth(120); // ÉÏÏßʱ¼ä
|
tagTable.getColumnModel().getColumn(10).setPreferredWidth(100);
|
|
JScrollPane scrollPane = new JScrollPane(tagTable);
|
scrollPane.setPreferredSize(new Dimension(1200, 400));
|
|
// Ìí¼Ó×é¼þ
|
add(searchPanel, BorderLayout.NORTH);
|
add(scrollPane, BorderLayout.CENTER);
|
add(actionPanel, BorderLayout.SOUTH);
|
|
// ¼ÓÔØÊý¾Ý
|
loadTagData();
|
|
// Ìí¼Óʼþ¼àÌýÆ÷
|
searchButton.addActionListener(new SearchAction());
|
addButton.addActionListener(e -> {
|
AddTagDialog dialog = new AddTagDialog((Frame) SwingUtilities.getWindowAncestor(TagManagementPanel.this), messages);
|
dialog.setVisible(true);
|
if (dialog.isConfirmed()) {
|
try {
|
Dell_tag.insertLocationTag(dialog.getTag());
|
loadTagData();
|
JOptionPane.showMessageDialog(TagManagementPanel.this,
|
messages.getString("SAVE_SUCCESS"),
|
messages.getString("SUCCESS"),
|
JOptionPane.INFORMATION_MESSAGE);
|
} catch (SQLException ex) {
|
JOptionPane.showMessageDialog(TagManagementPanel.this,
|
messages.getString("SAVE_FAILED") + ": " + ex.getMessage(),
|
messages.getString("ERROR"),
|
JOptionPane.ERROR_MESSAGE);
|
}
|
}
|
});
|
|
deleteButton.addActionListener(e -> {
|
int selectedRow = tagTable.getSelectedRow();
|
if (selectedRow == -1) {
|
JOptionPane.showMessageDialog(TagManagementPanel.this,
|
messages.getString("SELECT_TAG_TO_DELETE"),
|
messages.getString("INFO"),
|
JOptionPane.INFORMATION_MESSAGE);
|
return;
|
}
|
|
String deviceId = (String) tableModel.getValueAt(selectedRow, 1);
|
int confirm = JOptionPane.showConfirmDialog(TagManagementPanel.this,
|
messages.getString("CONFIRM_DELETE") + " [" + deviceId + "]?",
|
messages.getString("CONFIRM_DELETE_TITLE"),
|
JOptionPane.YES_NO_OPTION);
|
|
if (confirm == JOptionPane.YES_OPTION) {
|
try {
|
Dell_tag.deleteLocationTag(deviceId);
|
loadTagData();
|
JOptionPane.showMessageDialog(TagManagementPanel.this,
|
messages.getString("DELETE_SUCCESS"),
|
messages.getString("SUCCESS"),
|
JOptionPane.INFORMATION_MESSAGE);
|
} catch (SQLException ex) {
|
JOptionPane.showMessageDialog(TagManagementPanel.this,
|
messages.getString("DELETE_FAILED") + ": " + ex.getMessage(),
|
messages.getString("ERROR"),
|
JOptionPane.ERROR_MESSAGE);
|
}
|
}
|
});
|
}
|
|
private void loadTagData() {
|
try {
|
// ¼ÓÔØÊý¾Ý
|
allTags = Dell_tag.getlocationTags();
|
updateTable(allTags);
|
} catch (SQLException ex) {
|
JOptionPane.showMessageDialog(this,
|
messages.getString("DATA_LOAD_ERROR") + ": " + ex.getMessage(),
|
messages.getString("ERROR"),
|
JOptionPane.ERROR_MESSAGE);
|
}
|
}
|
|
private void updateTable(List<LocationTag> tags) {
|
tableModel.setRowCount(0); // Çå¿Õ±í¸ñ
|
|
int index = 1;
|
for (LocationTag tag : tags) {
|
// ת»»ÔÚÏß״̬
|
String onlineStatus = "1".equals(tag.getOnlineStatus()) ?
|
messages.getString("ONLINE") : messages.getString("OFFLINE");
|
|
// Ìí¼ÓÐÐ - °´ÕÕ±í5ÒªÇóÐÞ¸ÄÊý¾ÝÔ´
|
tableModel.addRow(new Object[]{
|
index++,
|
tag.getDeviceNumber(),
|
tag.getDeviceName(),
|
onlineStatus,
|
tag.getDeviceType(),
|
tag.getDeviceBattery() + "%",
|
tag.getDeviceCardNumber(), // ¿¨ºÅ
|
tag.getIpAndPort(), // µØÖ·¶Ë¿Ú
|
tag.getDeviceVersion(),
|
tag.getOnlineTime(), // ÉÏÏßʱ¼ä
|
tag.getCompany()
|
});
|
}
|
}
|
|
private class SearchAction implements ActionListener {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
String keyword = searchField.getText().trim();
|
if (keyword.isEmpty()) {
|
updateTable(allTags); // ÏÔʾËùÓÐÊý¾Ý
|
return;
|
}
|
|
// ËÑË÷ÄÚÈݹ¦ÄÜ - Ôö¼Ó¹«Ë¾ËÑË÷
|
java.util.List<LocationTag> filteredTags = new java.util.ArrayList<>();
|
for (LocationTag tag : allTags) {
|
if (matchesKeyword(tag, keyword)) {
|
filteredTags.add(tag);
|
}
|
}
|
|
updateTable(filteredTags);
|
}
|
|
private boolean matchesKeyword(LocationTag tag, String keyword) {
|
// ËÑË÷É豸±àºÅ¡¢É豸Ãû³ÆºÍ¹«Ë¾
|
return (tag.getDeviceNumber() != null && tag.getDeviceNumber().contains(keyword)) ||
|
(tag.getDeviceName() != null && tag.getDeviceName().contains(keyword)) ||
|
(tag.getCompany() != null && tag.getCompany().contains(keyword));
|
}
|
}
|
}
|