java Swing之JTabbedPane用法实例 & JTable用法实例

来源:互联网 发布:网络审核员天河 编辑:程序博客网 时间:2024/06/05 09:42

一款用JTabbedPane选项卡实现的实例,其功能领域有:笑话、新闻、星座运势、成语、解梦。询问不同领域的问题,自动切换至对应的选项卡来输出答案。用到的技术主要有:javax.swing.JFrame,javax.swing.JTabbedPane,javax.swing.JScrollPane,javax.swing.GroupLayout,javax.swing.JTable,Jsoup。

程序运行效果图见(上一篇)Olami智能语义解析—学习娱乐小能手

该程序可运行jar包见xiaonengshou.jar

代码原文如下:

1、MyJFrame:界面显示。

import java.awt.Color;import java.awt.Desktop;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.net.URL;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.swing.GroupLayout.Alignment;import javax.swing.GroupLayout;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;public class MyJFrame extends javax.swing.JFrame {    private static final long serialVersionUID = 1L;    private JButton jButton_send;    private JLabel jLabel1;    private JLabel jLabel2;    private JPanel jPanel1;    private JTextField jTextField1;    private JTextArea areaTxt;    private JTabbedPane tabbedPanel;    private JTable table;    private String introduce = "你好,我是娱乐学习小能手。\r\n 我可以讲笑话、查运势、查新闻、查公交线、查成语、还可以解梦呢!\r\n\r\n";    private String[] introduces = {"笑话类:\r\n 1、讲笑话。\r\n 2、来个笑话。\r\n 趣图类:\r\n 1、看趣图。\r\n 2、来张趣图。","新闻类:\r\n 1、娱乐头条。\r\n 2、看新闻。","星座类:\r\n 1、摩羯座今日运势。\r\n 2、摩羯座本月运势。 \r\n 3、摩羯座的本周运势","成语类:\r\n 1、日积月累是什么意思。\r\n 2、有龙字的成语 。\r\n 3、带龙马的成语。","解梦类:\r\n 1、我梦到了黄金。\r\n 2、梦到了黄金有什么寓意。"};    private AppProcess app;    public MyJFrame() {             initComponents();        app = new AppProcess();    }      private void initComponents() {        jPanel1 = new JPanel();        jLabel1 = new JLabel();        jLabel2 = new JLabel();        jTextField1 = new JTextField();        jButton_send = new JButton();        tabbedPanel = new JTabbedPane(JTabbedPane.TOP);        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        setMinimumSize(new java.awt.Dimension(430, 280));        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("智能问答"));        JLabel jl_href = new JLabel("<html><a href=''>相关代码详细说明</a></html>");         jl_href.addMouseListener(new MouseListener(){            @Override            public void mouseClicked(MouseEvent arg0) {                // TODO Auto-generated method stub                Desktop desktop = Desktop.getDesktop();                try {                    desktop.browse(new URI("http://blog.csdn.net/u011827504/article/details/75284546"));                } catch (IOException | URISyntaxException e1) {                    e1.printStackTrace();                }            }            @Override            public void mouseEntered(MouseEvent arg0) {}            @Override            public void mouseExited(MouseEvent arg0) {}            @Override            public void mousePressed(MouseEvent arg0) {}            @Override            public void mouseReleased(MouseEvent arg0) {}        });        jLabel1.setText("提问:");        jTextField1.setText("娱乐头条");        jButton_send.setText("send");        jButton_send.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                jButton_sendActionPerformed(evt);            }        });            GroupLayout jPanel1Layout = new GroupLayout(jPanel1);        GroupLayout.SequentialGroup hGroup = jPanel1Layout.createSequentialGroup();        hGroup.addGap(15);        hGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jLabel1));        hGroup.addGap(5);        hGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jTextField1).addComponent(jl_href).addComponent(jLabel2));        hGroup.addGap(5);        hGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jButton_send));        hGroup.addGap(15);        jPanel1Layout.setHorizontalGroup(hGroup);        GroupLayout.SequentialGroup vGroup = jPanel1Layout.createSequentialGroup();        vGroup.addGap(8);        vGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jl_href));        vGroup.addGap(8);        vGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jLabel1)                .addComponent(jTextField1).addComponent(jButton_send));        vGroup.addGap(8);        vGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jLabel2));        vGroup.addGap(8);        //设置垂直组        jPanel1Layout.setVerticalGroup(vGroup);        jPanel1.setLayout(jPanel1Layout);      //创建面板          JScrollPane panel_joke = new JScrollPane();          JScrollPane panel_news = new JScrollPane();          JScrollPane panel_hor = new JScrollPane();          JScrollPane panel_idiom = new JScrollPane();          JScrollPane panel_oneir = new JScrollPane();          areaTxt = new JTextArea();        areaTxt.setColumns(28);        areaTxt.setRows(15);        areaTxt.setText(introduce + introduces[0]);         areaTxt.setEditable(false);        areaTxt.setLineWrap(true);        areaTxt.setAutoscrolls(true);        panel_joke.setViewportView(areaTxt);        tabbedPanel.addTab("笑话",panel_joke);          tabbedPanel.addTab("新闻",panel_news);           tabbedPanel.addTab("星座",panel_hor);          tabbedPanel.addTab("成语",panel_idiom);          tabbedPanel.addTab("解梦",panel_oneir);          tabbedPanel.addChangeListener(new ChangeListener(){              @Override            public void stateChanged(ChangeEvent arg0) {                // TODO Auto-generated method stub                int index = tabbedPanel.getSelectedIndex();                areaTxt.setText(introduce + introduces[index]);                ((JScrollPane)tabbedPanel.getComponent(index)).setViewportView(areaTxt);            }          });          GroupLayout layout = new GroupLayout(getContentPane());        getContentPane().setLayout(layout);        layout.setHorizontalGroup(            layout.createParallelGroup(GroupLayout.Alignment.LEADING)            .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()                .addContainerGap()                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)                    .addComponent(tabbedPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)                    .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))                .addContainerGap())        );        layout.setVerticalGroup(            layout.createParallelGroup(GroupLayout.Alignment.LEADING)            .addGroup(layout.createSequentialGroup()                .addContainerGap()                .addComponent(jPanel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                .addComponent(tabbedPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)                .addContainerGap())        );        pack();    }     private void jButton_sendActionPerformed(java.awt.event.ActionEvent evt) {        // TODO add your handling code here:        Map<String, Object> retMap = app.process(jTextField1.getText());        jLabel2.setText("");        if (retMap.containsKey("ds")) {            jLabel2.setText(retMap.get("ds").toString());            jLabel2.setForeground(Color.red);        } else if (retMap.containsKey("joke")) {            Object obj = retMap.get("joke");            tabbedPanel.setSelectedIndex(0);            JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(0));            if (obj instanceof String) {                areaTxt.setText(obj.toString());                jpanel.setViewportView(areaTxt);            } else {                JLabel jLabel = new JLabel();                if (obj != null) {                    ImageIcon image = new ImageIcon((URL) obj);                    jLabel.setIcon(image);                } else {                    jLabel.setText("图片加载失败!");                }                jpanel.setViewportView(jLabel);            }        }else if (retMap.containsKey("horoname")){            Object obj = retMap.get("horoname");            tabbedPanel.setSelectedIndex(2);            JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(2));            areaTxt.setText(obj.toString());            jpanel.setViewportView(areaTxt);        }else if(retMap.containsKey("news")){            Object obj = retMap.get("news");            tabbedPanel.setSelectedIndex(1);            JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(1));            if (obj instanceof String) {                areaTxt.setText(obj.toString());                jpanel.setViewportView(areaTxt);            }else{                @SuppressWarnings("unchecked")                Map<String, List<String>> newsMap = (HashMap<String, List<String>>)obj;                List<String> titleList = newsMap.get("title");                final List<String> urlList = newsMap.get("url");                table = getSimpleTable(titleList);                jpanel.setViewportView(table);                table.addMouseListener(new MouseListener(){                    @Override                    public void mouseClicked(MouseEvent arg0) {                        // TODO Auto-generated method stub                        // 取得用户所选行的行数                        int selectRows=table.getSelectedRows().length;                        if(selectRows==1){                          // 取得用户所选单行                           int selectedRowIndex = table.getSelectedRow();                           String url = urlList.get(selectedRowIndex);                          Desktop desktop = Desktop.getDesktop();                            try {                                desktop.browse(new URI(url));                            } catch (IOException | URISyntaxException e1) {                                e1.printStackTrace();                            }                        }                                           }                    @Override                    public void mouseEntered(MouseEvent arg0) {}                    @Override                    public void mouseExited(MouseEvent arg0) {}                    @Override                    public void mousePressed(MouseEvent arg0) {}                    @Override                    public void mouseReleased(MouseEvent arg0) {}});            }                   }else if(retMap.containsKey("oneiromancy")){            Object obj = retMap.get("oneiromancy");            tabbedPanel.setSelectedIndex(4);            final JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(4));            if (obj instanceof String) {                areaTxt.setText(obj.toString());                jpanel.setViewportView(areaTxt);            }else{                @SuppressWarnings("unchecked")                Map<String, List<String>> OneirMap = (HashMap<String, List<String>>)obj;                List<String> wordList = OneirMap.get("word");                final List<String> urlList = OneirMap.get("url");                table = getSimpleTable(wordList);                jpanel.setViewportView(table);                table.addMouseListener(new MouseListener(){                    @Override                    public void mouseClicked(MouseEvent arg0) {                        // TODO Auto-generated method stub                        // 取得用户所选行的行数                        int selectRows=table.getSelectedRows().length;                        if(selectRows==1){                          // 取得用户所选单行                           int selectedRowIndex = table.getSelectedRow();                           String url = urlList.get(selectedRowIndex);                          String answer = app.getOneirData(url);                          areaTxt.setText(answer);                          jpanel.setViewportView(areaTxt);                        }                                           }                    @Override                    public void mouseEntered(MouseEvent arg0) {}                    @Override                    public void mouseExited(MouseEvent arg0) {}                    @Override                    public void mousePressed(MouseEvent arg0) {}                    @Override                    public void mouseReleased(MouseEvent arg0) {}});            }        }else if(retMap.containsKey("idioms")){        Object obj = retMap.get("idioms");        tabbedPanel.setSelectedIndex(3);        final JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(3));        if (obj instanceof String) {            areaTxt.setText(obj.toString());            jpanel.setViewportView(areaTxt);        }else{            @SuppressWarnings("unchecked")            Map<String, List<String>> OneirMap = (HashMap<String, List<String>>)obj;            List<String> nameList = OneirMap.get("name");            final List<String> idList = OneirMap.get("id");            table = getSimpleTable(nameList);            jpanel.setViewportView(table);            table.addMouseListener(new MouseListener(){                @Override                public void mouseClicked(MouseEvent arg0) {                    // TODO Auto-generated method stub                    // 取得用户所选行的行数                    int selectRows=table.getSelectedRows().length;                    if(selectRows==1){                      // 取得用户所选单行                       int selectedRowIndex = table.getSelectedRow();                       String id = idList.get(selectedRowIndex);                      String answer = app.getIdiomsP(id);                      areaTxt.setText(answer);                      jpanel.setViewportView(areaTxt);                    }                                       }                @Override                public void mouseEntered(MouseEvent arg0) {}                @Override                public void mouseExited(MouseEvent arg0) {}                @Override                public void mousePressed(MouseEvent arg0) {}                @Override                public void mouseReleased(MouseEvent arg0) {}});        }    }    }    public JTable getSimpleTable(List<String> titleList){          String[] colname = {"请选择"};         int num = titleList.size();        Object[][] data = new Object[num][1];        for(int i =0; i < num; i++ ){            data[i] = new Object[]{(i+1) + "、" +titleList.get(i)};                      }        JTable jtable = new JTable(data,colname);          return jtable;      }      public static void main(String args[]) {        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                MyJFrame frame = new MyJFrame();                frame.setTitle("自然语言理解试验小程序——学习娱乐小能手");                frame.setLocationRelativeTo(null);                frame.setVisible(true);            }        });    }}

2、NLIProcess:智能语义解析(支持领域有笑话、新闻、星座运势、成语、解梦)。

import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.ArrayList;import java.util.Calendar;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONException;import com.alibaba.fastjson.JSONObject;public class NLIProcess {    private static final String url = "https://cn.olami.ai/cloudservice/api";    private static final String Appkey = "fcf20941682b494e9db8c23c14deeb74";    private static final String Appsecret = "1bcbbe1fb5924185a13c9b5f6d548ee0";    private static final String api = "nli";        private JSONObject process (String input) {        JSONObject NLIresult = new JSONObject();        List<NameValuePair> params = new ArrayList<NameValuePair>();        params.add(new BasicNameValuePair("appkey", Appkey));        params.add(new BasicNameValuePair("api", api));        long timestamp = Calendar.getInstance().getTimeInMillis();        params.add(new BasicNameValuePair("timestamp", String.valueOf(timestamp)));        params.add(new BasicNameValuePair("sign", generateSign(timestamp)));        JSONObject request = new JSONObject();        JSONObject data = new JSONObject();        try {            data.put("input_type", 0);            data.put("text", input);            request.put("data_type", "stt");            request.put("data", data);        } catch (JSONException e1) {            e1.printStackTrace();            return NLIresult;        }        params.add(new BasicNameValuePair("rq", request.toString()));        params.add(new BasicNameValuePair("cusid", "asdfghj"));        CloseableHttpClient httpclient = HttpClients.createDefault();        HttpPost httppost = new HttpPost(url);        try {            httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));            CloseableHttpResponse response = httpclient.execute(httppost);            try {                HttpEntity entity = response.getEntity();                if (entity != null) {                    String contnt = EntityUtils.toString(entity);                    NLIresult = JSONObject.parseObject(contnt);                }            } finally {                response.close();            }        } catch (Exception e) {            e.printStackTrace();            return NLIresult;        } finally {            try {                httpclient.close();            } catch (Exception e) {                e.printStackTrace();            }        }        return NLIresult;    }    private String generateSign(long timestamp) {        String sign = Appsecret + "api=" + api + "appkey=" + Appkey + "timestamp=" + timestamp + Appsecret;        return MD5String(sign);    }    public String MD5String(String str) {        try {            MessageDigest msgDigest = MessageDigest.getInstance("MD5");            msgDigest.reset();            msgDigest.update(str.getBytes("UTF-8"));            byte[] byteArrary = msgDigest.digest();            StringBuffer md5StrBuff = new StringBuffer();            for (int i = 0; i < byteArrary.length; i++) {                String tmp = Integer.toHexString(0xFF & byteArrary[i]);                if (tmp.length() == 1) {                    md5StrBuff.append(0).append(tmp);                } else {                    md5StrBuff.append(tmp);                }            }            return md5StrBuff.toString();        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();            return null;        } catch (UnsupportedEncodingException e) {            e.printStackTrace();            return null;        }    }       public Semantic parseSemantic(String input) {        JSONObject semantic = process(input);        Semantic s = new Semantic();        if (semantic == null || !"ok".equalsIgnoreCase(semantic.getString("status")))             return s;        JSONObject data = semantic.getJSONObject("data");        JSONArray s_list = data.getJSONArray("nli");        JSONObject s_first = s_list.getJSONObject(0);        s.app = s_first.getString("type");        JSONObject desc_obj = s_first.getJSONObject("desc_obj");        s.status = desc_obj.getInteger("status");        if (0 == s.status && desc_obj.containsKey("result")) {            s.answer = desc_obj.getString("result");        }else if(0 != s.status){            s.answer = desc_obj.getString("result");            return s;        }        JSONObject intention = s_first.getJSONArray("semantic").getJSONObject(0);        JSONArray modifier = intention.getJSONArray("modifier");        for (int i = 0; i != modifier.size(); i++) {            s.modifiers.add(modifier.getString(i));        }        JSONArray slots = intention.getJSONArray("slots");        for (int i = 0; i != slots.size(); i++) {            JSONObject record = slots.getJSONObject(i);            Slot slot = new Slot();            slot.name = record.getString("name");            slot.value = record.getString("value");            s.slots.put(slot.name, slot);        }        return s;    }}class Semantic {    String app = "";    String answer = "";    Map<String, Slot> slots = new HashMap<String, Slot>();    List<String> modifiers = new ArrayList<>();    int status = -1;}class Slot {    String name = "";    String value = "";}

3、AppProcess:笑话和成语的api接口访问,新闻、星座运势、解梦爬虫。

import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.text.MessageFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.ParseException;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.eclipse.swt.graphics.ImageData;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.parser.Parser;import org.jsoup.parser.XmlTreeBuilder;import org.jsoup.select.Elements;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;public class AppProcess {    private NLIProcess nli = new NLIProcess();    private Map<String,List<String>> horMap = new HashMap<>();    private List<String> jokeList = new ArrayList<String>();    private List<String> jokePicList = new ArrayList<String>();    private void getHorMap(){        String[] horStrs = {"白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座","水瓶座","双鱼座"};        String[] yunshiStrs = {"todaybox3","tomorrowbox3","weekbox3","monthbox3","textbox"};        for(int i = 1; i <= 12; i++){            List<String> yunshiList = new ArrayList<>();            for(int j = 1; j <= 5; j++){                                String url = MessageFormat.format("http://cn.xingbar.com/cgi-bin/x5starfate2?fate={0}&type={1}", j, i);                String httpContent = getHttpContent(url, "GBK");                if (httpContent != null && !httpContent.equals("")){                    Document doc = Jsoup.parse(httpContent);                    Element boxElement = doc.getElementsByClass(yunshiStrs[j-1]).first();                    if(boxElement != null){                        StringBuffer content = new StringBuffer();                        Elements dottxtElements = boxElement.getElementsByClass("dotLbox");                        if(dottxtElements != null){                                                 for(Element e : dottxtElements){                                content.append(e.text() + "\r\n");                            }                                               }                        Elements dotRtxtElements = boxElement.getElementsByClass("dotRbox");                        if(dotRtxtElements != null){                                                        for(Element e : dotRtxtElements){                                content.append(e.text() + "\r\n");                            }                        }                        Elements trElements = boxElement.select("tr");                        for(Element e : trElements){                            content.append(e.text() + "\r\n");                        }                        yunshiList.add(content.toString());                    }                }            }            horMap.put(horStrs[i-1], yunshiList);        }    }    private void getJokeList(){        String jokeUrl = "http://api.laifudao.com/open/xiaohua.json";        String jokePicUrl = "http://api.laifudao.com/open/tupian.json";        String httpContent = getHttpContent(jokeUrl,"UTF-8");        JSONArray jokeJS = JSONArray.parseArray(httpContent);        for(int i = 0; i<jokeJS.size(); i++){            JSONObject js = jokeJS.getJSONObject(i);            String jTitle = js.getString("title");            String jContent = js.getString("content");            jokeList.add(jTitle + "\r\n" + jContent.replaceAll("<br/><br/>", "\r\n"));        }        httpContent = getHttpContent(jokePicUrl,"UTF-8");        JSONArray jokepJS = JSONArray.parseArray(httpContent);        for(int i = 0; i<jokepJS.size(); i++){            JSONObject js = jokepJS.getJSONObject(i);            String jContent = js.getString("sourceurl");            jokePicList.add(jContent);        }    }    private Map<String, List<String>> getNewsMap(String type){        Map<String, List<String>> newsMap = new HashMap<>();        List<String> titleList = new ArrayList<>();        List<String> urlList = new ArrayList<>();        String url = MessageFormat.format("http://www.chinanews.com/rss/{0}.xml", type);        String httpContent = getHttpContent(url,"gbk");        //Document doc = Jsoup.parse(httpContent);        Document doc = Jsoup.parse(httpContent, "", new Parser(new XmlTreeBuilder()));        //item        Elements itemElements = doc.select("item");        if(itemElements != null){                               for(Element e : itemElements){                String title = e.select("title").first().text();                String link = e.select("link").first().text();                titleList.add(title);                urlList.add(link);            }            newsMap.put("title", titleList);            newsMap.put("url", urlList);        }        return newsMap;    }    private Map<String, List<String>> getOneirMap(String content){        Map<String, List<String>> OneirMap = new HashMap<>();        List<String> wordList = new ArrayList<>();        List<String> urlList = new ArrayList<>();        String path = "http://www.aqioo.cn";        String url = "http://www.aqioo.cn/dream/Dlist?word=" + content;        String httpContent = getHttpContent(url, "GBK");        if (httpContent != null && !httpContent.equals("")){            Document doc = Jsoup.parse(httpContent);            Element fixElement = doc.getElementsByClass("clearfix").first();            if(fixElement != null){                Elements aElements = fixElement.select("a");                if(aElements != null){                                      for(Element e : aElements){                        String word = e.text();                        String id = e.attr("href");                        wordList.add(word);                        urlList.add(path+id);                    }                    OneirMap.put("word", wordList);                    OneirMap.put("url", urlList);                }            }        }        return OneirMap;    }    public String getOneirData(String url){        StringBuffer content = new StringBuffer();        String httpContent = getHttpContent(url, "GBK");        if (httpContent != null && !httpContent.equals("")){            Document doc = Jsoup.parse(httpContent);            Element idElement = doc.getElementById("wraper");            if(idElement != null){                Element infoElement = idElement.getElementsByClass("info").first();                content.append(infoElement.text());                         }                                       }               return content.toString();    }    private Map<String, List<String>> getIdioms(String idiom){        Map<String, List<String>> idiomsMap = new HashMap<>();        List<String> idiomList = new ArrayList<>();        List<String> idList = new ArrayList<>();        String urlkey = "您申请的key值";        String url = "http://api.avatardata.cn/ChengYu/Search?key="+urlkey+"&keyWord="+idiom;        String httpContent = getHttpContent(url,"UTF-8");        JSONObject idiomJS = JSONObject.parseObject(httpContent);        if(idiomJS != null && idiomJS.get("reason").equals("Succes")){            JSONArray idiomsJSlist = idiomJS.getJSONArray("result");            int size = idiomsJSlist.size();            for(int i = 0; i<size; i++){                JSONObject js = idiomsJSlist.getJSONObject(i);                idiomList.add(js.getString("name"));                idList.add(js.getString("id"));            }            idiomsMap.put("name", idiomList);            idiomsMap.put("id", idList);            if(size == 1){                String desc = getIdiomsP(idList.get(0));                List<String> descList = new ArrayList<>();                descList.add(desc);                idiomsMap.put("desc", descList);            }        }        return idiomsMap;    }    public String getIdiomsP(String id){        String urlkey = "您申请的key值";        String url = "http://api.avatardata.cn/ChengYu/LookUp?key="+urlkey+"&id="+id;        String httpContent = getHttpContent(url,"UTF-8");        JSONObject idiomJS = JSONObject.parseObject(httpContent).getJSONObject("result");        StringBuffer retStr = new StringBuffer();        retStr.append("成语:"+idiomJS.getString("name")+"\r\n" + "拼音:"+idiomJS.getString("spell")+"\r\n"+"释义:"+idiomJS.getString("content")+"\r\n");        String derivation = idiomJS.getString("derivation");        if(derivation!= null && !derivation.equals("")){            retStr.append("出处:"+derivation+"\r\n");        }        String samples = idiomJS.getString("samples");        if(samples!= null && !samples.equals("")){            retStr.append("例句:"+samples+"\r\n");        }        return retStr.toString();    }    public String getHttpContent(String url,String charset) {        StringBuffer httpContent = new StringBuffer();        CloseableHttpClient httpclient = HttpClients.createDefault();        try {            HttpGet httpget = new HttpGet(url);            CloseableHttpResponse response = httpclient.execute(httpget);            try {                // 获取响应实体                HttpEntity entity = response.getEntity();                if (entity != null) {                    if(charset != null && !charset.isEmpty()){                                              httpContent.append(EntityUtils.toString(entity,charset));                    }else{                        httpContent.append(EntityUtils.toString(entity));                    }                }            } finally {                response.close();            }        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (ParseException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            // 关闭连接,释放资源            try {                httpclient.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return httpContent.toString();    }    public ImageData DownloadImg(String listImgSrc) {        try {            URL url = new URL(listImgSrc);            HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();            urlcon.setInstanceFollowRedirects(false);            urlcon.setRequestMethod("GET");            urlcon.setDoOutput(true);            urlcon.setDoInput(true);            if (urlcon.getResponseCode() == HttpURLConnection.HTTP_OK) {                try (InputStream urlcon_is = urlcon.getInputStream();) {                    return new ImageData(urlcon_is);                } catch (IOException e) {                    e.printStackTrace();                }            }        } catch (IOException e) {            e.printStackTrace();        }        return null;    }    private URL getUrl(String picurl){        try {            URL url = new URL(picurl);            return url;        } catch (MalformedURLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return null;    }    public Map<String, Object> process(String input) {        Semantic s = nli.parseSemantic(input);        Map<String, Object> retMap = new HashMap<String, Object>();        if(s.app.equals("joke")){            if(jokeList.size() < 1 || jokePicList.size() < 1){                getJokeList();            }            if(s.modifiers.contains("query")){                if(jokeList.size() < 1){                    retMap.put("joke", "对不起,网络不给力,笑话加载失败。");                }else{                                      int randomInt = (int)(Math.random() * jokeList.size());                    retMap.put("joke", jokeList.get(randomInt));                }            }else if(s.modifiers.contains("query_pic")){                if(jokeList.size() < 1){                    retMap.put("joke", "对不起,网络不给力,趣图加载失败。");                }else{                                      int randomInt = (int)(Math.random() * jokePicList.size());                    String picurl = jokePicList.get(randomInt);                    retMap.put("joke", getUrl(picurl));                }            }else{                retMap.put("joke", s.answer);            }                   }else if(s.app.equals("news")){            if(s.modifiers.contains("query")){                Map<String, List<String>> newsMap = new HashMap<>();                if(s.slots != null && !s.slots.isEmpty()){                                      String slotValue = s.slots.get("type").value;                    newsMap = getNewsMap(slotValue);                }else{                    newsMap = getNewsMap("importnews");                                 }                if(newsMap.isEmpty()){                    retMap.put("news", "对不起,网络不给力,新闻加载失败。");                }else{                    retMap.put("news", newsMap);                }            }else{                retMap.put("news", s.answer);            }        }else if(s.app.equals("horoname")){            if(horMap.isEmpty()){                getHorMap();            }            //horMap            String slotValue = s.slots.get("hname").value;            List<String> horList = horMap.get(slotValue);            if(s.modifiers.contains("can")){                retMap.put("horoname", s.answer);            }else if(horList.size() < 1){                retMap.put("horoname", "对不起,网络不给力,运势加载失败。");            }else if(s.modifiers.contains("lucktoday")){                retMap.put("horoname", horList.get(0));            }else if(s.modifiers.contains("lucktomor")){                retMap.put("horoname", horList.get(1));            }else if(s.modifiers.contains("luckweek")){                retMap.put("horoname", horList.get(2));            }else if(s.modifiers.contains("luckmonth")){                retMap.put("horoname", horList.get(3));            }else if(s.modifiers.contains("luckyear")){                retMap.put("horoname", horList.get(4));            }        }else if(s.app.equals("oneiromancy")){            if(s.modifiers.contains("query")){                String slotValue = s.slots.get("content").value;                 Map<String, List<String>> OneirMap = getOneirMap(slotValue);                 if(OneirMap.isEmpty()){                    retMap.put("news", "对不起,网络不给力,解梦信息加载失败。");                }else{                                      retMap.put("oneiromancy", OneirMap);                }            }else{                retMap.put("oneiromancy", s.answer);            }        }else if(s.app.equals("idioms")){            Map<String, List<String>> idiomsMap = new HashMap<>();            if(s.modifiers.contains("query")){                String slotValue = s.slots.get("iname").value;                idiomsMap = getIdioms(slotValue);            }else if(s.modifiers.contains("query_idioms")){                String slotValue = s.slots.get("ikeyword").value;                idiomsMap = getIdioms(slotValue);            }            if(idiomsMap.isEmpty()){                                retMap.put("idioms", "对不起,网络不给力,成语加载失败。");            }else{                if(idiomsMap.containsKey("desc")){                    String desc = idiomsMap.get("desc").get(0);                    retMap.put("idioms", desc);                }else{                                      retMap.put("idioms", idiomsMap);                }            }        }else if(s.app.equals("ds")){            retMap.put("ds", s.answer);        }        return retMap;    }}
原创粉丝点击