注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

RSS 阅读器(JavaFX2.0)  

2011-10-15 21:44:01|  分类: Javafx |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.什么是RSS?
这里有详细的解释 http://baike.baidu.com/view/1644.htm
2.如何使用Java取得RSS数据和处理数据?
其实很简单,Java 第三方的开源库很多
处理RSS数据源的Jar有两类 1.rssutils.jar 
                                    2.Rome (rome-0.9.jar and jdom-1.0.jar)
下载地址:

3.使用Rome方法
RssFinder类 根据用户提供的url 取数据

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package rss.rssfinder;

import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;
import java.awt.event.ActionEvent;
import java.beans.EventHandler;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import javafx.scene.control.Hyperlink;
import rss.rssbean.RSSInfo;

/**
 *
 * @author hjzheng
 */
public class RssFinder {

    public List<RSSInfo> getRssData(String url) throws Exception {
        URLConnection feedUrl = new URL(url).openConnection();
        //read RSS infos
        SyndFeedInput input = new SyndFeedInput();
        SyndFeed feed = input.build(new XmlReader(feedUrl));
        //get list data
        List<SyndEntry> list = feed.getEntries();
        List<RSSInfo> rssInfos = new ArrayList<RSSInfo>();
        for(SyndEntry se : list){
            RSSInfo rssInfo = new RSSInfo();
            rssInfo.setAuthor(se.getAuthor());
            rssInfo.setLink(new Hyperlink(se.getLink()));
            rssInfo.setTitle(se.getTitle());
            rssInfos.add(rssInfo);
        }
        return rssInfos;
    }

    public static void main(String[] args) throws Exception {
        RssFinder rf = new RssFinder();
        rf.getRssData("http://zhenghaoju700.blog.163.com/rss/");
    }
}

4.JavaFX2.0 GUI
GUI的设计很简单
VBox 结构从上到下,TableView 将RSS中订阅的文章的作者,题目,链接显示出来
接着是Input框 用于输入RSS源(URL) Get Data按钮
再接着就是一个Broswer

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package rss;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import rss.rssbean.RSSInfo;
import rss.rssfinder.RssFinder;
/**
 *
 * @author hjzheng
 */
public class RSS extends Application {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("RSS feed");
        VBox vBox = new VBox();
        vBox.setPadding(new Insets(10,20,20,10));
        vBox.setSpacing(5);
        
        Scene scene = new Scene(vBox, 1024, 800);
        
        final WebView browser = new WebView();
        final WebEngine webEngine = browser.getEngine();
        
        
        Label title = new Label("RSS feed (by hjzheng)");
        vBox.getChildren().add(title);
        
        HBox hBox = new HBox();
        hBox.setSpacing(5);       
        Label label = new Label("RSS Source:");
        hBox.getChildren().add(label);
        
        final TextField text = new TextField ();
        text.setText("http://zhenghaoju700.blog.163.com/rss/");
        text.setMinWidth(500.0);
        hBox.getChildren().add(text);
        
        Button btn = new Button();
        btn.setText("Get Data");
       
        final TableView<RSSInfo> table = createTable();
        
        vBox.getChildren().add(table);
       
         
        btn.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent event) {
                String rssURL = text.getText();
                RssFinder rf = new RssFinder();
                List<RSSInfo> list = null;
                try {
                    list = rf.getRssData(rssURL);
                    for(RSSInfo rss : list){
                        rss.getLink().setOnAction(new EventHandler<ActionEvent>(){
                            public void handle(ActionEvent t) {
                                 Hyperlink hl = (Hyperlink)t.getTarget();
                                 webEngine.load(hl.getText());
                            }
                        });
                    }
                    ObservableList<RSSInfo> data = FXCollections.observableArrayList(list);
                    table.setItems(data);
                } catch (Exception ex) {
                    Logger.getLogger(RSS.class.getName()).log(Level.SEVERE, null, ex);
                }
                
            }
        });
       
        
        hBox.getChildren().add(btn);
        
        vBox.getChildren().add(hBox);
        
        vBox.getChildren().add(browser);
        
        VBox.setVgrow(browser, Priority.ALWAYS);
        
        
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    public TableView createTable(){
        
        TableColumn title = new TableColumn("title");
        title.setMinWidth(220);
        title.setCellValueFactory(
            new PropertyValueFactory<RSSInfo,String>("title")
        );
 
        TableColumn link = new TableColumn("link");
        link.setMinWidth(460);
        link.setCellValueFactory(
            new PropertyValueFactory<RSSInfo,Hyperlink>("link")
        );
 
        TableColumn author = new TableColumn("author");
        author.setMinWidth(80);
        author.setCellValueFactory(
                new PropertyValueFactory<RSSInfo,String>("author")
        );
        TableView<RSSInfo> table = new TableView<RSSInfo>();
        table.setMaxHeight(200.0);
        table.autosize();
        table.getColumns().addAll(title, link, author);
        
        return table;
    }
}

5.部署打包,运行。点击Get Data 按钮,再点击link 下面的broswer出现页面。
RSS 阅读器(JavaFX2.0) - 星期五 - 星期五
 
更换一个RSS源 
RSS 阅读器(JavaFX2.0) - 星期五 - 星期五
 

参考资料

  评论这张
 
阅读(1043)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017