package dell_Fence; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.geom.Point2D; import java.util.ResourceBundle; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import dell_Fence.FenceDrawerFrame.SaveFenceCallback; import publicsWay.Xialajihe; //ΧÀ¸ÐÅÏ¢¶Ô»°¿òÀà public class FenceInfoDialog extends JDialog { private final ResourceBundle messages; // ¹ú¼Ê»¯×ÊÔ´ private final int currentShape; // µ±Ç°ÐÎ×´ private final Vector drawingPoints; // »æÖƵã private final SaveFenceCallback saveCallback; // ±£´æ»Øµ÷½Ó¿Ú public FenceInfoDialog(Frame parent, ResourceBundle messages, // ¹¹Ô캯Êý int currentShape, Vector drawingPoints, SaveFenceCallback saveCallback) { super(parent, messages.getString("FENCE_INFO_TITLE"), true); // ÉèÖñêÌâºÍģ̬ this.messages = messages; // ³õʼ»¯×ÊÔ´ this.currentShape = currentShape; // ³õʼ»¯ÐÎ×´ this.drawingPoints = drawingPoints; // ³õʼ»¯µã¼¯ this.saveCallback = saveCallback; // ³õʼ»¯»Øµ÷ setSize(600, 700); // ÉèÖô°¿Ú´óС setLayout(new BorderLayout()); // ÉèÖò¼¾Ö initUI(); // ³õʼ»¯½çÃæ } private void initUI() { // ³õʼ»¯½çÃæ JPanel mainPanel = new JPanel(null); // Ö÷Ãæ°å£¬¾ø¶Ô²¼¾Ö mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); // ÉèÖñ߿ò int x = 20; // X×ø±êÆðʼ int y = 20; // Y×ø±êÆðʼ int labelWidth = 120; // ±êÇ©¿í¶È int fieldWidth = 350; // ÊäÈë¿ò¿í¶È int height = 30; // ¸ß¶È int spacing = 40; // ´¹Ö±¼ä¾à // ΧÀ¸Ãû³Æ JLabel nameLabel = new JLabel(getMessage("FENCE_NAME") + ":"); // Ãû³Æ±êÇ© nameLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JTextField nameField = new JTextField(); // Ãû³ÆÊäÈë¿ò nameField.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(nameLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(nameField); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ JLabel coordLabel = new JLabel(getMessage("FENCE_COORDINATES") + ":"); // ΧÀ¸×ø±ê±êÇ© coordLabel.setBounds(x, y, labelWidth, height); // Éú³É×ø±ê×Ö·û´® StringBuilder coordsBuilder = new StringBuilder(); for (Point2D.Double point : drawingPoints) { coordsBuilder.append(String.format("(%.0f, %.0f), ", point.x, point.y)); } String fullCoords = coordsBuilder.toString(); // ÒÆ³ý×îºóÒ»¸ö¶ººÅºÍ¿Õ¸ñ if (fullCoords.length() > 0) { fullCoords = fullCoords.substring(0, fullCoords.length() - 2); } // ½ØÈ¡Ç°100×Ö·û£¨¿¼ÂÇÊ¡ÂÔºÅռ룩 String displayCoords = fullCoords; // ´´½¨Îı¾ÇøÓò£¨¶àÐÐÎı¾¿ò£© JTextArea coordTextArea = new JTextArea(displayCoords); coordTextArea.setEditable(false); // ÉèÖÃΪֻ¶Á coordTextArea.setLineWrap(true); // ×Ô¶¯»»ÐÐ coordTextArea.setWrapStyleWord(true); // °´µ¥´Ê»»ÐÐ // ½«Îı¾¿ò·ÅÈë¹ö¶¯Ãæ°å JScrollPane coordScrollPane = new JScrollPane(coordTextArea); coordScrollPane.setBounds(x + labelWidth, y, fieldWidth, 80); // ÉèÖÃÊʵ±¸ß¶È coordScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // Ìí¼ÓÌáʾÎı¾£¨ÍêÕû×ø±ê£© coordTextArea.setToolTipText(fullCoords.length() > 100 ? fullCoords : null); mainPanel.add(coordLabel); mainPanel.add(coordScrollPane); // Ìí¼Ó¹ö¶¯Ãæ°å¶ø·ÇÎı¾¿ò y += 90; // Ôö¼Ó¶îÍâ¸ß¶È // ΧÀ¸ÀàÐÍ JLabel typeLabel = new JLabel(getMessage("FENCE_TYPE") + ":"); // ÀàÐͱêÇ© typeLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JComboBox typeComboBox= new JComboBox<>(new String[]{ // ÀàÐÍÏÂÀ­¿ò getMessage("ATTENDANCE_AREA"), getMessage("ENTRY_ALARM"), getMessage("EXIT_ALARM"), getMessage("OVERSTAFFED_ALARM"), getMessage("UNDERSTAFFED_ALARM"), getMessage("CROWD_GATHERING_ALARM"), getMessage("INDOOR_AREA"), getMessage("LOCATION_AREA"), getMessage("INVALID_AREA"), getMessage("PATROL_AREA"), getMessage("VIDEO_AREA"), getMessage("FLOOR_HEIGHT_FENCE"), getMessage("SAFE_AREA"), getMessage("WORK_AREA"), }); typeComboBox.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(typeLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(typeComboBox); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ // ¹ÜÀí²¿ÃÅ JLabel deptLabel = new JLabel(getMessage("MANAGE_DEPT") + ":"); // ²¿ÃűêÇ© deptLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JComboBox deptComboBox = new JComboBox<>(); // ²¿ÃÅÏÂÀ­¿ò for (String dept : Xialajihe.AllDepartmentNames) { // ±éÀú²¿ÃÅÁбí deptComboBox.addItem(dept); // Ìí¼Óµ½ÏÂÀ­¿ò } deptComboBox.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(deptLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(deptComboBox); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ // ΧÀ¸ÑÕÉ« JLabel colorLabel = new JLabel(getMessage("FENCE_COLOR") + ":"); // ÑÕÉ«±êÇ© colorLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JComboBox colorComboBox = new JComboBox<>(new String[]{ // ÑÕÉ«ÏÂÀ­¿ò getMessage("RED"), // ºìÉ« getMessage("GREEN"), // ÂÌÉ« getMessage("BLUE"), // À¶É« getMessage("BLACK"), // ºÚÉ« getMessage("WHITE"), // °×É« getMessage("MAGENTA") // Æ·ºì }); colorComboBox.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(colorLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(colorComboBox); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ // Ñ¡Ôñ¹«Ë¾ JLabel companyLabel = new JLabel(getMessage("SELECT_COMPANY") + ":"); // ¹«Ë¾±êÇ© companyLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JComboBox companyComboBox = new JComboBox<>(); // ¹«Ë¾ÏÂÀ­¿ò for (String company : Xialajihe.AllCompanyNames) { // ±éÀú¹«Ë¾Áбí companyComboBox.addItem(company); // Ìí¼Óµ½ÏÂÀ­¿ò } companyComboBox.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(companyLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(companyComboBox); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ // ËùÊôͼ²ã JLabel layerLabel = new JLabel(getMessage("BELONG_LAYER") + ":"); // ͼ²ã±êÇ© layerLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JComboBox layerComboBox = new JComboBox<>(); // ͼ²ãÏÂÀ­¿ò for (String layer : Xialajihe.AllLayerNumbers) { // ±éÀúͼ²ãÁбí layerComboBox.addItem(layer); // Ìí¼Óµ½ÏÂÀ­¿ò } layerComboBox.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(layerLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(layerComboBox); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ // ÉúЧʱ¼ä JLabel startTimeLabel = new JLabel(getMessage("START_TIME") + ":"); // ¿ªÊ¼Ê±¼ä±êÇ© startTimeLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JTextField startTimeField = new JTextField("00:00:00"); // ĬÈÏʱ¼ä startTimeField.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(startTimeLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(startTimeField); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ // ʧЧʱ¼ä JLabel endTimeLabel = new JLabel(getMessage("END_TIME") + ":"); // ½áÊøÊ±¼ä±êÇ© endTimeLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JTextField endTimeField = new JTextField("23:59:59"); // ĬÈÏʱ¼ä endTimeField.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà mainPanel.add(endTimeLabel); // Ìí¼Óµ½Ãæ°å mainPanel.add(endTimeField); // Ìí¼Óµ½Ãæ°å y += spacing; // ÏÂÒÆ // ÊÇ·ñÆôÓà JLabel enableLabel = new JLabel(getMessage("ENABLE") + ":"); // ÆôÓñêÇ© enableLabel.setBounds(x, y, labelWidth, height); // ÉèÖÃλÖà JPanel enablePanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0)); // ÆôÓÃÃæ°å enablePanel.setBounds(x + labelWidth, y, fieldWidth, height); // ÉèÖÃλÖà JRadioButton enableYes = new JRadioButton(getMessage("YES")); // Êǵ¥Ñ¡°´Å¥ enableYes.setSelected(true); // ĬÈÏÑ¡ÖÐ JRadioButton enableNo = new JRadioButton(getMessage("NO")); // ·ñµ¥Ñ¡°´Å¥ ButtonGroup enableGroup = new ButtonGroup(); // °´Å¥×é enableGroup.add(enableYes); // Ìí¼Óµ½×é enableGroup.add(enableNo); // Ìí¼Óµ½×é enablePanel.add(enableYes); // Ìí¼Óµ½Ãæ°å enablePanel.add(enableNo); // Ìí¼Óµ½Ãæ°å mainPanel.add(enableLabel); // Ìí¼Óµ½Ö÷Ãæ°å mainPanel.add(enablePanel); // Ìí¼Óµ½Ö÷Ãæ°å y += spacing; // ÏÂÒÆ // °´Å¥Ãæ°å JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10)); // ÓÒ¶ÔÆë°´Å¥Ãæ°å buttonPanel.setBounds(0, y + 20, 460, 50); // ÉèÖÃλÖà JButton saveButton = new JButton(getMessage("SAVE")); // ±£´æ°´Å¥ saveButton.addActionListener(e -> { // ±£´æÊ¼þ String fenceName = nameField.getText().trim(); // »ñÈ¡Ãû³Æ if (fenceName.isEmpty()) { // Èç¹ûΪ¿Õ JOptionPane.showMessageDialog(this, // µ¯³ö¾¯¸æ getMessage("FENCE_NAME") + getMessage("CANNOT_EMPTY"), // ÌáʾÐÅÏ¢ getMessage("WARNING"), JOptionPane.WARNING_MESSAGE); // ±êÌâºÍͼ±ê return; // ·µ»Ø } if (fenceName.length() > 50) { // Èç¹û³¬¹ý50×Ö·û JOptionPane.showMessageDialog(this, // µ¯³ö¾¯¸æ getMessage("FENCE_NAME") + getMessage("LENGTH_LIMIT") + "50", // ÌáʾÐÅÏ¢ getMessage("WARNING"), JOptionPane.WARNING_MESSAGE); // ±êÌâºÍͼ±ê return; // ·µ»Ø } if (Dell_Fence.isFenceNameExists(fenceName)) { // Èç¹ûÃû³ÆÒÑ´æÔÚ JOptionPane.showMessageDialog(this, // µ¯³ö¾¯¸æ fenceName + getMessage("ALREADY_EXISTS"), // ÌáʾÐÅÏ¢ getMessage("WARNING"), JOptionPane.WARNING_MESSAGE); // ±êÌâºÍͼ±ê return; // ·µ»Ø } // Ìí¼Ó×ø±ê·Ç¿ÕÑéÖ¤ if (drawingPoints.isEmpty()) { JOptionPane.showMessageDialog(this, getMessage("FENCE_COORDINATES_EMPTY"), getMessage("WARNING"), JOptionPane.WARNING_MESSAGE); return; } saveCallback.save( // µ÷Óñ£´æ»Øµ÷ fenceName, // Ãû³Æ (String) typeComboBox.getSelectedItem(), // ÀàÐÍ (String) deptComboBox.getSelectedItem(), // ²¿ÃÅ (String) colorComboBox.getSelectedItem(), // ÑÕÉ« (String) companyComboBox.getSelectedItem(), // ¹«Ë¾ (String) layerComboBox.getSelectedItem(), // ͼ²ã startTimeField.getText(), // ¿ªÊ¼Ê±¼ä endTimeField.getText(), // ½áÊøÊ±¼ä enableYes.isSelected() ? "1" : "0" // ÊÇ·ñÆôÓà ); dispose(); // ¹Ø±Õ¶Ô»°¿ò }); JButton cancelButton = new JButton(getMessage("CANCEL")); // È¡Ïû°´Å¥ cancelButton.addActionListener(e -> dispose()); // È¡ÏûʼþÖ±½Ó¹Ø±Õ buttonPanel.add(saveButton); // Ìí¼Ó±£´æ°´Å¥ buttonPanel.add(cancelButton); // Ìí¼ÓÈ¡Ïû°´Å¥ mainPanel.add(buttonPanel); // Ìí¼Óµ½Ö÷Ãæ°å add(mainPanel, BorderLayout.CENTER); // Ö÷Ãæ°åÌí¼Óµ½´°¿ÚÖмä } private String getMessage(String key) { // »ñÈ¡¹ú¼Ê»¯Îı¾ try { return messages.getString(key); // ´Ó×ÊÔ´°ü»ñÈ¡ } catch (Exception e) { return "[" + key + "]"; // Òì³£·µ»Ø¼üÃû } } }