JAVA小項目實例源碼—學習娛樂小助手


代碼地址如下:
http://www.demodashi.com/demo/11456.html

一、程序實現

  • 項目目錄:
    MyJFrame:實現項目界面樣式;
    AppProcess:實現調用api或爬蟲拿數據;
    NLIProcess:解析用戶輸入語句意圖;
    lib中是程序開發需要用到的jar包列表。

  • 主要代碼說明:

程序不同功能領域由選項卡JTabbedPane展示。用戶輸入哪個功能領域的問題,將由該領域的選項卡展示答案。

在選項卡中添加選項:

            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);
			}  
        });  

輸出答案時切換為對應功能選項卡展示答案:

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) {}});
										
		}
		
	}

	}

使用Jsoup解析XML:

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, "", 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;
	}

二、運行效果

  • 運行截圖如下:
    笑話(支持看笑話、看趣圖):

    新聞(顯示新聞列表,點選后可進入新聞詳情頁):

    星座(支持查今日、明日、本周、本月、今年運勢):

    成語(支持成語釋義、查帶某字、詞的成語):

    解夢:

三、其他補充

  • 新聞:
    點選新聞標題后會調用瀏覽器顯示新聞詳細頁(這里本來打算用JEditorPane實現的,實現后發現新聞網頁格式變形,查詢資料知道JEditorPane 存在缺陷: 不支持CSS樣式和JavaScript。所以改為了調用瀏覽器打開新聞頁。)
  • 星座:
    沒有找到免費的api接口,星座數據是用爬蟲爬下來的,所以第一次問星座問題時出結果會有點慢。
    JAVA小項目實例源碼—學習娛樂小助手

代碼地址如下:
http://www.demodashi.com/demo/11456.html

注:本文著作權歸作者,由demo大師代發,拒絕轉載,轉載需要作者授權


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM