package home; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Date; public class SendPanel extends JPanel { /** * */ private static final long serialVersionUID = 1L; private MainFrame mainFrame; private JTextArea sendArea; private JCheckBox hexSendCheck, loopSendCheck; private JTextField loopTimeField; private JButton sendBtn, extensionBtn; private JLabel loopTimeLabel; // Ìí¼ÓÑ­»·Ê±¼ä±êÇ©ÒýÓà private JLabel addressLabel; // Ìí¼ÓµØÖ·±êÇ©ÒýÓà private JTextField addressField; // Ìí¼ÓµØÖ·Îı¾¿òÒýÓà public SendPanel(MainFrame mainFrame) { this.mainFrame = mainFrame; initializeUI(); } private void initializeUI() { setLayout(new BorderLayout()); // ÉèÖñ߽粼¾Ö setBorder(BorderFactory.createTitledBorder(getString("send.data"))); // ÉèÖôø±êÌâµÄ±ß¿ò // ´´½¨¶¥²¿¿ØÖÆÃæ°å JPanel topControlPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // ¶¥²¿¿ØÖÆÃæ°å£¬×ó¶ÔÆëÁ÷ʽ²¼¾Ö hexSendCheck = new JCheckBox(getString("hex.send")); // HEX·¢Ë͸´Ñ¡¿ò loopSendCheck = new JCheckBox(getString("loop.send")); // Ñ­»··¢Ë͸´Ñ¡¿ò loopTimeLabel = new JLabel(getString("loop.time")); // Ñ­»·Ê±¼ä±êÇ© loopTimeField = new JTextField(8); // Ñ­»·Ê±¼äÎı¾¿ò loopTimeField.setText("1000"); // ÉèÖÃĬÈÏÑ­»·Ê±¼ä extensionBtn = ButtonUtils.createBlueButton(getString("extension"), 25); // À©Õ¹°´Å¥£¬¸ß¶È25ÏñËØ extensionBtn.setPreferredSize(new Dimension(80, 25)); // ÉèÖð´Å¥¿í¶ÈΪ120£¬¸ß¶È25 // ÔÚ SendPanel µÄ initializeUI() ·½·¨ÖУ¬´´½¨ extensionBtn ºóÌí¼Ó£º extensionBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ExtensionPanel extensionPanel = new ExtensionPanel(mainFrame); extensionPanel.setVisible(true); } }); topControlPanel.add(hexSendCheck); // Ìí¼ÓHEX·¢Ë͸´Ñ¡¿ò topControlPanel.add(loopSendCheck); // Ìí¼ÓÑ­»··¢Ë͸´Ñ¡¿ò topControlPanel.add(loopTimeLabel); // Ìí¼ÓÑ­»·Ê±¼ä±êÇ© topControlPanel.add(loopTimeField); // Ìí¼ÓÑ­»·Ê±¼äÎı¾¿ò topControlPanel.add(extensionBtn); // Ìí¼ÓÀ©Õ¹°´Å¥ // ´´½¨Öв¿¿ØÖÆÃæ°å£¨Ö¸¶¨µØÖ··¢ËÍ£© JPanel middleControlPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // Öв¿¿ØÖÆÃæ°å£¬×ó¶ÔÆëÁ÷ʽ²¼¾Ö addressLabel = new JLabel(getString("specified.address")); // Ö¸¶¨µØÖ·±êÇ© addressField = new JTextField(30); // Ö¸¶¨µØÖ·Îı¾¿ò middleControlPanel.add(addressLabel); // Ìí¼ÓÖ¸¶¨µØÖ·±êÇ© middleControlPanel.add(addressField); // Ìí¼ÓÖ¸¶¨µØÖ·Îı¾¿ò // ´´½¨·¢ËÍÇøÓòÃæ°å JPanel sendAreaPanel = new JPanel(new BorderLayout()); // ·¢ËÍÇøÓòÃæ°å£¬±ß½ç²¼¾Ö sendArea = new JTextArea(3, 25); // ·¢ËÍÎı¾ÇøÓò JScrollPane scrollPane = new JScrollPane(sendArea); // ·¢ËÍÇøÓò¹ö¶¯Ãæ°å sendAreaPanel.add(scrollPane, BorderLayout.CENTER); // Ìí¼Ó¹ö¶¯Ãæ°åµ½ÖÐÐÄ // ´´½¨µ×²¿¿ØÖÆÃæ°å£¨·¢ËͰ´Å¥£© JPanel bottomControlPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // µ×²¿¿ØÖÆÃæ°å£¬×ó¶ÔÆëÁ÷ʽ²¼¾Ö sendBtn = ButtonUtils.createBlueButton(getString("send"), 25); // ·¢ËͰ´Å¥£¬¸ß¶È25ÏñËØ sendBtn.setPreferredSize(new Dimension(100, 25)); // ÉèÖð´Å¥¿í¶ÈΪ120£¬¸ß¶È25 // Ìí¼Ó·¢ËͰ´Å¥µã»÷ʼþ sendBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { sendData(); } }); bottomControlPanel.add(sendBtn); // Ìí¼Ó·¢ËͰ´Å¥ // ´´½¨Ö÷Ãæ°å£¬Ê¹Óô¹Ö±ºÐ×Ó²¼¾Ö JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); // ´¹Ö±ºÐ×Ó²¼¾Ö mainPanel.add(topControlPanel); // Ìí¼Ó¶¥²¿¿ØÖÆÃæ°å mainPanel.add(middleControlPanel); // Ìí¼ÓÖв¿¿ØÖÆÃæ°å mainPanel.add(sendAreaPanel); // Ìí¼Ó·¢ËÍÇøÓòÃæ°å mainPanel.add(bottomControlPanel); // Ìí¼Óµ×²¿¿ØÖÆÃæ°å add(mainPanel, BorderLayout.CENTER); // Ìí¼ÓÖ÷Ãæ°åµ½ÖÐÐÄ } /** * ·¢ËÍÊý¾Ý²¢ÔÚÊý¾ÝÈÕÖ¾ÖÐÏÔʾ */ private void sendData() { String sendContent = sendArea.getText().trim(); if (sendContent.isEmpty()) { JOptionPane.showMessageDialog(this, getString("send.content.empty"), getString("prompt"), JOptionPane.WARNING_MESSAGE); return; } // »ñÈ¡µ±Ç°Ê±¼ä SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentTime = dateFormat.format(new Date()); // ¹¹½¨ÈÕÖ¾ÐÅÏ¢ StringBuilder logMessage = new StringBuilder(); logMessage.append("[").append(currentTime).append("] "); logMessage.append(getString("send")).append(": "); // ¸ù¾ÝHEX·¢ËÍÑ¡Ïî¸ñʽ»¯ÄÚÈÝ if (hexSendCheck.isSelected()) { logMessage.append("HEX "); // ÕâÀï¿ÉÒÔÌí¼ÓHEX¸ñʽת»»Âß¼­ logMessage.append(sendContent); } else { logMessage.append("ASCII "); logMessage.append(sendContent); } // Èç¹ûÓÐÖ¸¶¨µØÖ·£¬Ìí¼Óµ½ÈÕÖ¾ÖÐ String address = addressField.getText().trim(); if (!address.isEmpty()) { logMessage.append(" [").append(getString("specified.address")).append(": ").append(address).append("]"); } logMessage.append("\n"); // ½«·¢ËÍÐÅÏ¢Ìí¼Óµ½Êý¾ÝÈÕÖ¾Ãæ°å DataLogPanel dataLogPanel = mainFrame.getDataLogPanel(); if (dataLogPanel != null) { // ͨ¹ý·´Éä»òÆäËû·½Ê½·ÃÎÊDataLogPanelµÄlogArea // ÕâÀï¼ÙÉèDataLogPanelÓÐÌí¼ÓÈÕÖ¾µÄ·½·¨ addLogToDataLogPanel(dataLogPanel, logMessage.toString()); } // ÕâÀï¿ÉÒÔÌí¼Óʵ¼ÊµÄ·¢ËÍÂß¼­ } /** * ½«ÈÕÖ¾ÐÅÏ¢Ìí¼Óµ½Êý¾ÝÈÕÖ¾Ãæ°å * @param dataLogPanel Êý¾ÝÈÕÖ¾Ãæ°å * @param logMessage ÈÕÖ¾ÐÅÏ¢ */ private void addLogToDataLogPanel(DataLogPanel dataLogPanel, String logMessage) { try { // ʹÓ÷´Éä»ñÈ¡logArea²¢Ìí¼ÓÈÕÖ¾ java.lang.reflect.Field logAreaField = DataLogPanel.class.getDeclaredField("logArea"); logAreaField.setAccessible(true); JTextArea logArea = (JTextArea) logAreaField.get(dataLogPanel); if (logArea != null) { logArea.append(logMessage); // ×Ô¶¯¹ö¶¯µ½×îºó logArea.setCaretPosition(logArea.getDocument().getLength()); } } catch (Exception ex) { // Èç¹û·´Éäʧ°Ü£¬³¢ÊÔÆäËû·½Ê½ System.err.println("ÎÞ·¨·ÃÎÊÊý¾ÝÈÕÖ¾ÇøÓò: " + ex.getMessage()); // ÕâÀï¿ÉÒÔÌí¼Ó±¸Ó÷½°¸ } } public void updateLanguage() { setBorder(BorderFactory.createTitledBorder(getString("send.data"))); // ¸üб߿ò±êÌâ hexSendCheck.setText(getString("hex.send")); // ¸üÐÂHEX·¢Ë͸´Ñ¡¿òÎı¾ loopSendCheck.setText(getString("loop.send")); // ¸üÐÂÑ­»··¢Ë͸´Ñ¡¿òÎı¾ sendBtn.setText(getString("send")); // ¸üз¢ËͰ´Å¥Îı¾ extensionBtn.setText(getString("extension")); // ¸üÐÂÀ©Õ¹°´Å¥Îı¾ // Ö±½Ó¸üбêÇ©Îı¾£¬ÎÞÐè±éÀú²éÕÒ if (loopTimeLabel != null) { loopTimeLabel.setText(getString("loop.time")); // ¸üÐÂÑ­»·Ê±¼ä±êÇ©Îı¾ } // ¸üÐÂÖ¸¶¨µØÖ·±êÇ© if (addressLabel != null) { addressLabel.setText(getString("specified.address")); // ¸üÐÂÖ¸¶¨µØÖ·±êÇ©Îı¾ } revalidate(); // ÖØÐÂÑéÖ¤²¼¾Ö repaint(); // ÖØÐ»æÖÆ } private String getString(String key) { return mainFrame.getString(key); // ´ÓÖ÷¿ò¼Ü»ñÈ¡×Ö·û´® } /** * »ñÈ¡·¢ËÍÇøÓòÄÚÈÝ * @return ·¢ËÍÄÚÈÝ */ public String getSendContent() { return sendArea.getText(); } /** * ÉèÖ÷¢ËÍÇøÓòÄÚÈÝ * @param content ·¢ËÍÄÚÈÝ */ public void setSendContent(String content) { sendArea.setText(content); } /** * »ñÈ¡HEX·¢ËÍ״̬ * @return ÊÇ·ñHEX·¢ËÍ */ public boolean isHexSend() { return hexSendCheck.isSelected(); } /** * »ñȡѭ»··¢ËÍ״̬ * @return ÊÇ·ñÑ­»··¢ËÍ */ public boolean isLoopSend() { return loopSendCheck.isSelected(); } /** * »ñȡѭ»·Ê±¼ä * @return Ñ­»·Ê±¼ä£¨ºÁÃ룩 */ public int getLoopTime() { try { return Integer.parseInt(loopTimeField.getText()); } catch (NumberFormatException e) { return 1000; // ĬÈÏ1Ãë } } }