软件构造结课实验
package translate; import java.util.HashMap; import java.util.Map; public class TransApi { private static final String TRANS_API_HOST = "https://fanyi-api.baidu.com/api/trans/vip/translate"; private String appid; private String securityKey; public TransApi(String appid, String securityKey) { this.appid = appid; this.securityKey = securityKey; } public String getTransResult(String query, String from, String to) { Map<String, String> params = buildParams(query, from, to); return HttpGet.get(TRANS_API_HOST, params); } private Map<String, String> buildParams(String query, String from, String to) { Map<String, String> params = new HashMap<>(); params.put("q", query); params.put("from", from); params.put("to", to); params.put("appid", appid); // 随机数 String salt = String.valueOf(System.currentTimeMillis()); params.put("salt", salt); // 签名 String src = appid + query + salt + securityKey; params.put("sign", MD5.md5(src)); return params; } }
package translate; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { public static String md5(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] array = md.digest(str.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : array) { sb.append(String.format("%02X", b)); } return sb.toString().toLowerCase(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } }
package translate; import org.json.JSONObject; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Main { private static final String APP_ID = "20241112002200093"; private static final String SECURITY_KEY = "g9ZWChI6fIvp2E2BiFL5"; public static void main(String[] args) { SwingUtilities.invokeLater(() -> new TranslateFrame()); } static class TranslateFrame extends JFrame { private JTextField inputField; private JComboBox<String> languageComboBox; private JTextArea resultArea; private JButton translateButton; public TranslateFrame() { super("中英文翻译"); // JFrame settings setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 400); // Adjusted size to ensure better visibility setLocationRelativeTo(null); // Center the window setTitle("中英文翻译"); // Set Look and Feel try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } // Use BoxLayout for vertical layout with proper spacing setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); setSpacing(20); // Set spacing between components // Set font for the frame (ensure Chinese support) Font font = new Font("Microsoft YaHei", Font.PLAIN, 14); // Input panel with label and text field JPanel inputPanel = new JPanel(); inputPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); inputPanel.add(new JLabel("请输入文本:")); inputField = new JTextField(30); inputField.setFont(font); // Use Chinese-compatible font inputPanel.add(inputField); add(inputPanel); // Language selection panel with label and combo box JPanel comboPanel = new JPanel(); comboPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); comboPanel.add(new JLabel("选择翻译方向:")); String[] languages = {"中文翻译成英文", "英文翻译成中文"}; languageComboBox = new JComboBox<>(languages); languageComboBox.setFont(font); // Use Chinese-compatible font comboPanel.add(languageComboBox); add(comboPanel); // Translate button panel JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)); translateButton = new JButton("翻译"); translateButton.setFont(new Font("Microsoft YaHei", Font.BOLD, 16)); // Bold font translateButton.setBackground(new Color(0x4CAF50)); // Green color for the button translateButton.setForeground(Color.WHITE); // Set text color to white translateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String text = inputField.getText(); String selectedLanguage = (String) languageComboBox.getSelectedItem(); String result = translateText(text, selectedLanguage); resultArea.setText(result); } }); buttonPanel.add(translateButton); add(buttonPanel); // Result text area with scroll pane JPanel resultPanel = new JPanel(); resultPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); resultPanel.add(new JLabel("翻译结果:")); resultArea = new JTextArea(5, 30); resultArea.setFont(font); // Use Chinese-compatible font resultArea.setLineWrap(true); resultArea.setWrapStyleWord(true); resultArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(resultArea); resultPanel.add(scrollPane); add(resultPanel); // Make the frame visible setVisible(true); } private String translateText(String text, String selectedLanguage) { TransApi api = new TransApi(APP_ID, SECURITY_KEY); switch (selectedLanguage) { case "中文翻译成英文": return parseResult(api.getTransResult(text, "zh", "en")); case "英文翻译成中文": return parseResult(api.getTransResult(text, "en", "zh")); default: return "未知的语言选项"; } } private String parseResult(String json) { try { JSONObject obj = new JSONObject(json); if (obj.has("trans_result")) { return obj.getJSONArray("trans_result").getJSONObject(0).getString("dst"); } else if (obj.has("error_code")) { return "Error: " + obj.getString("error_msg"); } } catch (Exception e) { return "JSON解析错误: " + e.getMessage(); } return "未知响应"; } // Helper method to set spacing between components private void setSpacing(int spacing) { // Set vertical gap between components Component[] components = getContentPane().getComponents(); for (Component component : components) { if (component instanceof JComponent) { ((JComponent) component).setMaximumSize(new Dimension(Integer.MAX_VALUE, component.getPreferredSize().height)); ((JComponent) component).setAlignmentX(Component.LEFT_ALIGNMENT); } } } } }
package translate; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map; import java.util.StringJoiner; public class HttpGet { public static String get(String host, Map<String, String> params) { try { StringBuilder urlBuilder = new StringBuilder(host); if (params != null && !params.isEmpty()) { urlBuilder.append("?"); for (Map.Entry<String, String> entry : params.entrySet()) { urlBuilder.append(entry.getKey()).append("=").append(java.net.URLEncoder.encode(entry.getValue(), "UTF-8")).append("&"); } urlBuilder.deleteCharAt(urlBuilder.length() - 1); // 删除最后一个'&' } URL url = new URL(urlBuilder.toString()); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); StringJoiner sj = new StringJoiner(""); String line; while ((line = reader.readLine()) != null) { sj.add(line); } reader.close(); return sj.toString(); } catch (Exception e) { e.printStackTrace(); return null; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?