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Ãë
|
}
|
}
|
}
|