软件构造结课实验

复制代码
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;
        }
    }
}
复制代码

 

posted @   KuanDong24  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示