Java程序设计:选实验5 GUI初级应用

使用JLabel、JTextArea、JButton等控件实现句子的中译英demo,该demo包含四个文本框,在第一个文本框输入一句英文,在第二个和第三个文本框显示该句的英文翻译(要求使用百度翻译API、有道翻译API或其他API中的两种;自行上网查找如何调用这些API),在第四个文本框显示两个翻译的相同之处。

package 选实验5;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

public class TransApi {
    private static final String TRANS_API_HOST = "http://api.fanyi.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) throws UnsupportedEncodingException {
        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) throws UnsupportedEncodingException {
        Map<String, String> params = new HashMap<String, String>();
        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 选实验5;

import com.youdao.aicloud.translate.utils.AuthV3Util;
import com.youdao.aicloud.translate.utils.HttpUtil;

import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

/**
 * 网易有道智云翻译服务api调用demo
 * api接口: https://openapi.youdao.com/api
 */
public class YoudaoTransApi {

	private static final String APP_ID = "XXXXXXXXXX"; 
    private static final String APP_KEY = "XXXXXXXXXX";     // 您的应用ID
    private static final String APP_SECRET = "XXXXXXXXXX";  // 您的应用密钥

    public static String getTransResult(String query, String from, String to)  throws NoSuchAlgorithmException {
        // 添加请求参数
        Map<String, String[]> params = createRequestParams(query, from, to);
        // 添加鉴权相关参数
        AuthV3Util.addAuthParams(APP_KEY, APP_SECRET, params);
        // 请求api服务
        byte[] result = HttpUtil.doPost("https://openapi.youdao.com/api", null, params, "application/json");
        // 打印返回结果
        String str = String.valueOf(result);
        return str;
    }

    private static Map<String, String[]> createRequestParams(String query, String from, String to) {
        /*
         * note: 将下列变量替换为需要请求的参数
         * 取值参考文档: https://ai.youdao.com/DOCSIRMA/html/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%BF%BB%E8%AF%91/API%E6%96%87%E6%A1%A3/%E6%96%87%E6%9C%AC%E7%BF%BB%E8%AF%91%E6%9C%8D%E5%8A%A1/%E6%96%87%E6%9C%AC%E7%BF%BB%E8%AF%91%E6%9C%8D%E5%8A%A1-API%E6%96%87%E6%A1%A3.html
         */

        return new HashMap<String, String[]>() {{
            put("q", new String[]{q});
            put("from", new String[]{from});
            put("to", new String[]{to});
            put("vocabId", new String[]{APP_ID});
        }};
    }
}
package 选实验5;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;

public class Translation {
    private TransApi transApi;
    private JTextArea inputTextArea;
    private JTextArea baiduOutputTextArea;
    private JTextArea youdaoOutputTextArea;
    private JTextArea commonOutputTextArea;

    public Translation(String baiduAppId, String baiduSecurityKey) {
        transApi = new TransApi(baiduAppId, baiduSecurityKey);

        JFrame frame = new JFrame("中英文翻译演示");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 400);
        frame.setLocationRelativeTo(null);
        frame.setLayout(new BorderLayout());

        // 创建输入区域
        JPanel inputPanel = new JPanel();
        inputPanel.setLayout(new FlowLayout());
        JLabel inputLabel = new JLabel("请输入中文:");
        inputTextArea = new JTextArea(3, 20);
        inputPanel.add(inputLabel);
        inputPanel.add(new JScrollPane(inputTextArea));

        // 创建翻译结果区域
        JPanel outputPanel = new JPanel();
        outputPanel.setLayout(new GridLayout(3, 2));

        JLabel baiduLabel = new JLabel("百度翻译结果:");
        baiduOutputTextArea = new JTextArea(3, 20);
        baiduOutputTextArea.setEditable(false);
        JScrollPane baiduScrollPane = new JScrollPane(baiduOutputTextArea);

        JLabel youdaoLabel = new JLabel("有道翻译结果:");
        youdaoOutputTextArea = new JTextArea(3, 20);
        youdaoOutputTextArea.setEditable(false);
        JScrollPane youdaoScrollPane = new JScrollPane(youdaoOutputTextArea);

        JLabel commonLabel = new JLabel("相同之处:");
        commonOutputTextArea = new JTextArea(3, 20);
        commonOutputTextArea.setEditable(false);
        JScrollPane commonScrollPane = new JScrollPane(commonOutputTextArea);

        outputPanel.add(baiduLabel);
        outputPanel.add(baiduScrollPane);
        outputPanel.add(youdaoLabel);
        outputPanel.add(youdaoScrollPane);
        outputPanel.add(commonLabel);
        outputPanel.add(commonScrollPane);

        // 创建翻译按钮
        JButton translateButton = new JButton("翻译");
        translateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
					translateButtonClicked();
				} catch (NoSuchAlgorithmException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
            }
        });

        // 将输入区域、翻译结果区域和翻译按钮添加到 JFrame
        frame.add(inputPanel, BorderLayout.NORTH);
        frame.add(translateButton, BorderLayout.CENTER);
        frame.add(outputPanel, BorderLayout.SOUTH);

        frame.setVisible(true);
    }

    private void translateButtonClicked() throws NoSuchAlgorithmException {
        String inputText = inputTextArea.getText();
        if (!inputText.isEmpty()) {
            try {
                // 使用 Baidu 翻译
                String baiduTranslation = transApi.getTransResult(inputText, "zh", "en");
                // 截取 "dst" 部分
                int startIndex = baiduTranslation.indexOf("\"dst\":\"") + 7;
                int endIndex = baiduTranslation.indexOf("\"", startIndex);
                String dst1 = baiduTranslation.substring(startIndex, endIndex);
                // 移除前导空格
                dst1 = dst1.trim();
                baiduOutputTextArea.setText(dst1);

                // 使用 Youdao 翻译
                String youdaoTranslation = YoudaoTransApi.getTransResult(inputText, "zh", "en");; // 请调用有道翻译 API 获取翻译结果
                // 截取 "dst" 部分
                startIndex = youdaoTranslation.indexOf("\"dst\":\"") + 7;
                endIndex = youdaoTranslation.indexOf("\"", startIndex);
                String dst2 = youdaoTranslation.substring(startIndex, endIndex);
                // 移除前导空格
                dst2 = dst2.trim();
                youdaoOutputTextArea.setText(dst2);

                // 查找相同之处
                String commonText = findCommon(dst1,dst2);
                commonOutputTextArea.setText(commonText);

            } catch (IOException ex) {
                ex.printStackTrace();
                JOptionPane.showMessageDialog(null, "翻译错误: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(null, "请输入要翻译的中文句子。", "错误", JOptionPane.ERROR_MESSAGE);
        }
    }

    private String findCommon(String text1, String text2) {
    	    String[] words1 = text1.split("\\s+");
    	    StringBuilder reStringBuilder = new StringBuilder();

    	    for (String word1 : words1) {
    	        if (text2.contains(word1)) {
    	            reStringBuilder.append(word1).append(" ");
    	        }
    	    }
    	    String commonWords = reStringBuilder.toString().trim();	    
    	    return commonWords;
    }


    public static void main(String[] args) {
        String baiduAppId = "XXXXXXXXXX";
        String baiduSecurityKey = "XXXXXXXXXX";

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Translation(baiduAppId, baiduSecurityKey);
            }
        });
    }
}

运行效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/335293.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习记录--mini-batch gradient descent

batch vs mini-batch gradient descent batch&#xff1a;段&#xff0c;块 与传统的batch梯度下降不同&#xff0c;mini-batch gradient descent将数据分成多个子集&#xff0c;分别进行处理&#xff0c;在数据量非常巨大的情况下&#xff0c;这样处理可以及时进行梯度下降&…

Text:字体相关设置

效果如下&#xff1a; import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("Text")Text {id: t1text: "你好&#xff0c;世界&#xff01;"color: "#29acc0" /*字体颜色*/font.pixelSize: 40 /*字体大小*/font.family: &quo…

在 Python 中检查一个数字是否是同构数

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 同构数&#xff0c;又称为自守数或自同构数&#xff0c;是一类特殊的数字&#xff0c;它们具有一种有趣的性质&#xff1a;将其平方后的数字&#xff0c;可以通过某种方式重新排列得到原来的数字。本文将详细介绍…

以后要做GIS开发的话是学GIS专业还是学计算机专业好一些?

GIS开发其实严格来说分为前后端以及底层开发。不同的方向&#xff0c;代表了不同的开发语言。 所以大家首先要了解自己具体要做的岗位类型是什么&#xff0c;其次才是选择专业侧重点。 但是严格来说&#xff0c;选择某个专业&#xff0c;到就业方向这个过程&#xff0c;并不是…

(C++) list底层模拟实现

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 首先&#xff0c;list底层是一个带头双向循环链表&#xff0c;再一个&#xff0c;我们还要解决一个问题&#xff0c;list的迭代器&#xff0c;vector和string的迭代器可以直接&#xff0c;是因为他们的地址空间是连续的&…

【AJAX框架】AJAX入门与axios的使用

文章目录 前言一、AJAX是干什么的&#xff1f;二、AJAX的安装2.1 CDN引入2.2 npm安装 三、基础使用3.1 CDN方式3.2 node方式 总结 前言 在现代Web开发中&#xff0c;异步JavaScript和XML&#xff08;AJAX&#xff09;已经成为不可或缺的技术之一。AJAX使得网页能够在不刷新整个…

hadoop-common: CMake failed with error code 1

问题 在编译hadoop源码时遇到如下错误 hadoop-common: CMake failed with error code 1 看了这个错误表示一脸懵逼 排查 在mvn 的命令中增加 -X 和 -e mvn clean package -e -X -Pdist,native -DskipTests -Dmaven.javadoc.skip -Dopenssl.prefix/usr/local/bin/openssl 在…

3.C语言——函数

函数 1.什么是函数2.函数的分类1.库函数2.自定义函数 3.函数的参数1.实际参数&#xff08;实参&#xff09;2.形式参数&#xff08;形参&#xff09; 4.函数的声明1.同一个文件的函数声明2.多文件的函数声明 5.函数的调用6.函数的嵌套调用和链式访问1.嵌套调用2.链式访问 7.函数…

P1059 [NOIP2006 普及组] 明明的随机数————C++、Python

目录 [NOIP2006 普及组] 明明的随机数题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 解题思路Code——CCode——Python运行结果 [NOIP2006 普及组] 明明的随机数 题目描述 明明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0…

力扣 | 438. 找到字符串中所有字母异位词

滑动窗口解题 示例 在s里面控制一个p字符串长度的滑动窗口&#xff0c;统计该滑动窗口中的每种字符出现的次数 import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class Problem_438_FindAnagrams {public List<Integer> findAnagram…

开放签开源工具版更新至1.1版本,进一步提升电子签名服务能力

本周开放签开源工具版增加了SDK与API能力&#xff0c;更新至1.1版本&#xff0c;使开放签电子签章工具能力进一步提升。 SDK将便于java用户直接使用CA证书颁发和签名能力。API接口采用HTTP&#xff08;S&#xff09;通讯&#xff0c;JSON报文格式&#xff0c;具有跨平台、跨语…

力扣hot100 最长有效括号 动态规划

Problem: 32. 最长有效括号 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) class Solution {public int longestValidParentheses(String s){int n s.length();…

electron使用rollup打包后,运行报错Could not dynamically require……

同学们可以私信我加入学习群&#xff01; 正文开始 分析解决总结 分析 这报错信息意思是rollup不支持动态的require&#xff0c;全部报错信息为&#xff1a; Could not dynamically require “./src/cat”. Please configure the dynamicRequireTargets or/and ignoreDynamic…

spring-boot项目,mybatis只读取了父模块的mapper目录,子模块的mapper目录读取不到

spring-boot项目&#xff0c;mybatis只读取了父模块的mapper目录&#xff0c;子模块的mapper目录读取不到 问题复现问题解决 问题复现 我的mybatis配置&#xff1a; 父模块mapper目录 子模块mapper目录 运行报错&#xff1a; 找不到子模块中的mapper配置 问题解决 debug…

做完十年数据分析后的思考与总结

种一棵树最好的时间是十年前&#xff0c;其次是现在。十年了&#xff0c;本次分享大多来自工作中的日常所思所想&#xff0c;欢迎自取。 01 数据分析的本质 数据是基础&#xff0c;分析才是重点。 行业内有专门的统计岗&#xff0c;就是只负责做好数据统计就可以了&#xff0…

第一篇【传奇开心果】Vant 开发移动应用:从helloworld开始

传奇开心果系列博文 博文系列目录Vant of Vue 开发移动应用示例博文目录一、从helloworld开始二、添加几个常用组件三、添加组件事件处理四、添加页面和跳转切换路由五、归纳总结知识点六、知识点示例代码 博文系列目录 Vant of Vue 开发移动应用示例 博文目录 一、从hellow…

Mybatis面试题(四)

MyBatis 面试题 26、Mapper 编写有哪几种方式&#xff1f; 第一种&#xff1a;接口实现类继承 SqlSessionDaoSupport&#xff1a;使用此种方法需要编写mapper 接口&#xff0c;mapper 接口实现类、mapper.xml 文件。 1、在 sqlMapConfig.xml 中配置 mapper.xml 的位置 <m…

IP改编国漫市场:繁荣背后的秘密,谁将成为下一个超级IP?

近年来IP改编已经是大众主流的趋向&#xff0c;原创剧本越来越少&#xff0c;现在市面上的动画影视大都是根据现有的IP进行二次创作&#xff0c;出来的效果也都参差不齐&#xff0c;比如说根据小说改编的《斗破苍穹》、《斗罗大陆》、《师兄啊师兄》&#xff0c;或者根据漫画改…

Spring Cloud可视化智慧工地大数据云平台源码(人、机、料、法、环五大维度)

智慧工地平台是依托物联网、互联网、AI、可视化建立的大数据管理平台&#xff0c;是一种全新的管理模式&#xff0c;能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三…

Python基本输入和输出

Python是一种高级编程语言&#xff0c;以其简洁易学和功能强大而闻名。在Python中&#xff0c;输入和输出是编程中至关重要的一部分&#xff0c;它们帮助程序与用户进行交互&#xff0c;以便获取输入并向用户显示输出。本文将重点介绍Python中的基本输入和输出&#xff0c;包括…