`
alexcheng
  • 浏览: 181130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaFX写的简易Rss阅读器

    博客分类:
  • Java
阅读更多

http://www.oreillynet.com/onjava/blog/2007/05/javafx_first_steps_hello_onjav_1.html这篇文章的启发,加上想学习一下JavaFX,就在上面那篇文章的基础上,做了一个简易的RSS阅读器,其界面类似于Adobe Flex 2的一个demo:进入http://try.flex.org/index.cfm,找到Blog Reader的demo。

读取RSS feed并没有什么问题,使用rome:

java 代码
  1. package rssreader;   
  2.   
  3. import com.sun.syndication.feed.synd.SyndEntry;   
  4. import com.sun.syndication.feed.synd.SyndFeed;   
  5. import com.sun.syndication.io.FeedException;   
  6. import com.sun.syndication.io.SyndFeedInput;   
  7. import com.sun.syndication.io.XmlReader;   
  8. import java.io.IOException;   
  9. import java.net.MalformedURLException;   
  10. import java.net.URL;   
  11.   
  12. public class RssReader {   
  13.     private URL url;   
  14.     private Integer titleLength = 50;   
  15.        
  16.     public RssReader() {   
  17.            
  18.     }   
  19.        
  20.     public SyndEntry[] load(String urlString) throws IllegalArgumentException, FeedException, IOException {   
  21.         if (urlString != null && urlString != "") {   
  22.             try {   
  23.                 url = new URL(urlString);   
  24.             } catch (MalformedURLException e) {   
  25.                 e.printStackTrace();   
  26.                 return null;   
  27.             }   
  28.         }   
  29.         if (url == null) {   
  30.             return null;   
  31.         }   
  32.         SyndFeedInput input = new SyndFeedInput();   
  33.         SyndFeed feed = input.build(new XmlReader(url));   
  34.         SyndEntry[] entries = (SyndEntry[]) feed.getEntries().toArray(new SyndEntry[0]);   
  35.   
  36.         for( SyndEntry entry : entries ) {   
  37.             entry.setTitle( entry.getTitle().length() > titleLength ? entry.getTitle().substring(0, titleLength - 3 ) + "..." : entry.getTitle() );   
  38.         }    
  39.            
  40.         return entries;   
  41.     }   
  42.        
  43.   
  44. }   

使用JavaFX构建UI:

JavaFX代码
  1. package rssreader;   
  2.   
  3. import javafx.ui.*;   
  4. import javafx.ui.canvas.*;   
  5. import javax.swing.JComponent;   
  6. import com.sun.syndication.feed.synd.SyndEntry;   
  7.   
  8. var reader:RssReader = READER;   
  9.   
  10. class RssReaderModel {   
  11.     attribute rssUrl: String;   
  12.     attribute rssEntries: SyndEntry*;   
  13.     attribute rssContent: String?;   
  14.     attribute rssSelectedIndex: Integer;   
  15. }   
  16.   
  17. var model = RssReaderModel {   
  18.     rssUrl: "http://woodstudio.iteye.com/blog/rss_blog/alexcheng",   
  19. };   
  20.   
  21.   
  22. var panel = GroupPanel {   
  23.      var row1 = Row {}   
  24.      var row2 = Row {}   
  25.      var col = Column {}   
  26.      rows: [row1, row2]   
  27.      columns: col   
  28.      content:    
  29.          [   
  30.             GroupPanel  {   
  31.                 row: row1   
  32.                 column: col   
  33.                 var row = Row {}   
  34.                 var labelCol =  new Column   
  35.                 var urlCol =  new Column   
  36.                 var butCol =  new Column   
  37.                 rows: row   
  38.                 columns: [labelCol, urlCol, butCol]   
  39.                 content:   
  40.                 [   
  41.                     SimpleLabel {   
  42.                         row: row   
  43.                         column: labelCol   
  44.                         text: "RSS URL:"  
  45.                     },   
  46.                      TextField {   
  47.                         row: row   
  48.                         column: urlCol   
  49.                         columns: 60   
  50.                         value: bind model.rssUrl   
  51.                     },   
  52.                     Button {   
  53.                         row: row   
  54.                         column: butCol   
  55.                         text: "Get Entries"  
  56.                         action: operation() {   
  57.                             model.rssEntries = reader.load(model.rssUrl);              
  58.                         }   
  59.                     }   
  60.                 ]   
  61.             },   
  62.             SplitPane   {   
  63.                 row: row2   
  64.                 column: col   
  65.                 orientation: HORIZONTAL   
  66.                 content:   
  67.                 [   
  68.                     SplitView  {   
  69.                         weight: 0.3   
  70.                         content:       
  71.                             Table {   
  72.                                     columns:   
  73.                                     [   
  74.                                         TableColumn {   
  75.                                             text: "Title"  
  76.                                         },   
  77.                                         TableColumn {   
  78.                                             text: "Date"  
  79.                                         },   
  80.                                     ]   
  81.                                     cells : bind foreach (entry in model.rssEntries)   
  82.                                             [   
  83.                                                 TableCell {   
  84.                                                     text: bind entry.title   
  85.                                                 },   
  86.                                                 TableCell {   
  87.                                                     text: bind entry.publishedDate.toLocaleString()   
  88.                                                 }   
  89.                                             ]   
  90.                                     selection: bind model.rssSelectedIndex   
  91.                                 }      
  92.                     },   
  93.                     SplitView  {   
  94.                         weight: 0.7   
  95.                         content:   
  96.                             EditorPane   {   
  97.                                 opaque: true  
  98.                                 contentType: HTML   
  99.                                 editable: false  
  100.                                 text: bind model.rssContent   
  101.                             }   
  102.                         }   
  103.                 ]   
  104.             }   
  105.          ]    
  106. };   
  107.   
  108. trigger on (RssReaderModel.rssSelectedIndex = value) {   
  109.     var desc = rssEntries[value].description.value;   
  110.     rssContent = "<html><body> {desc} </body></html>";    
  111. }   
  112.   
  113. MY_CONTAINER:JComponent.add(panel.getComponent());   
  114.   
  115.   

接着就是使用JSR223的scripting framework来执行:

java 代码
  1. package rssreader;   
  2.   
  3. import javax.script.Bindings;   
  4. import javax.script.ScriptContext;   
  5. import javax.script.ScriptEngine;   
  6. import javax.script.ScriptEngineManager;   
  7. import javax.script.SimpleScriptContext;   
  8. import javax.swing.JFrame;   
  9.   
  10. public class Main {   
  11.   
  12.     /**  
  13.      * @param args  
  14.      * @throws Exception  
  15.      */  
  16.     public static void main(String[] args) throws Exception {   
  17.         RssReader reader = new RssReader();   
  18.   
  19.         JFrame frame = new JFrame(   
  20.                 "RSS Reader implemented using JavaFX by alexcheng");   
  21.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  22.         frame.setSize(800600);   
  23.   
  24.         ClassLoader loader = Thread.currentThread().getContextClassLoader();   
  25.         ScriptEngineManager manager = new ScriptEngineManager(loader);   
  26.         ScriptEngine engine = manager.getEngineByExtension("fx");   
  27.   
  28.         Bindings bindings = engine.createBindings();   
  29.         bindings.put("READER:rssreader.RssReader", reader);   
  30.   
  31.         bindings.put("MY_CONTAINER:javax.swing.JComponent", frame   
  32.                 .getContentPane());   
  33.   
  34.         ScriptContext context = new SimpleScriptContext();   
  35.         context.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);   
  36.         context.setBindings(bindings, ScriptContext.ENGINE_SCOPE);   
  37.         engine.setContext(context);   
  38.   
  39.         String script = "import rssreader.FxMain;";   
  40.         engine.eval(script);   
  41.   
  42.         frame.setVisible(true);   
  43.     }   
  44.   
  45. }   

最后的界面如下:

 

  • 描述: JavaFX RSS Reader
  • 大小: 74.1 KB
分享到:
评论

相关推荐

    简易RSS阅读器

    【简易RSS阅读器】是一个基于Java编程语言开发的应用程序,主要功能是解析和展示RSS(Really Simple Syndication) feed,让使用者能够方便地获取和阅读网络上的新闻、博客或者其他更新内容。RSS是一种XML格式的数据...

    Java+XML写的RSS阅读器

    6. **用户界面**:JavaFX或Swing可以用来创建RSS阅读器的图形用户界面。用户可以通过界面订阅新的RSS源,查看和管理订阅列表,以及阅读和搜索内容。 7. **线程管理**:为了实现非阻塞的用户体验,RSS阅读器通常在...

    RSS阅读器相关jar包下载

    6. **用户界面**:开发RSS阅读器的用户界面可以使用JavaFX或Swing。JavaFX提供了一套现代、丰富的图形组件,适合创建美观且功能强大的桌面应用。Swing则是较旧但仍然广泛使用的UI库。 7. **事件驱动编程**:RSS阅读...

    javaFx Pdf 阅读器

    JavaFX PDF阅读器是一款基于JavaFX图形用户界面库开发的应用程序,主要用于查看和浏览PDF(Portable Document Format)文档。PDF格式是一种广泛使用的文档格式,它能够保持文档的原始布局和样式,无论在哪种设备上...

    RSS阅读器开发实战

    4. **Java Swing或JavaFX**:如果RSS阅读器是桌面应用,那么可能会用到Java GUI库,如Swing或JavaFX来构建用户界面。开发者需要了解组件布局、事件处理、数据绑定等概念。 5. **HTTP请求**:为了获取RSS feed,应用...

    Java+XML写的RSS阅读器.zip

    【Java+XML写的RSS阅读器】是一个基于Java编程语言和XML解析技术开发的软件应用,主要用于获取、解析和展示RSS(Really Simple Syndication) feed。RSS是一种内容发布格式,允许用户订阅并获取网站的更新信息,如...

    基于java的XML写的RSS阅读器.zip

    【标题】:“基于Java的XML写的RSS阅读器” 在标题中提到的“基于Java的XML写的RSS阅读器”是一个利用Java编程语言开发的程序,它能够解析并展示RSS(Really Simple Syndication) feed。RSS是一种XML格式,用于...

    学校里办的JavaFX讲座时JavaFX的简易PPT,Sun同事主讲

    学校里办的JavaFX讲座时JavaFX的简易PPT,Sun同事主讲,加入了和WPF等的比较,开阔了眼界,非常好

    javafx写的记事本

    javafx写的记事本

    Java+XML写的RSS阅读器.7z

    Java+XML编写的RSS阅读器是一个利用Java编程语言和XML技术实现的应用,主要用于解析和展示RSS(Really Simple Syndication) feeds。RSS是一种基于XML的互联网内容发布格式,它允许用户订阅并获取网站的最新更新,如...

    java源码:Java+XML写的RSS阅读器.rar

    【标题】:“Java+XML写的RSS阅读器”是基于Java编程语言实现的一个应用程序,它能够解析和显示RSS(Really Simple Syndication)格式的新闻或博客摘要。RSS是一种用于发布和订阅内容的XML标准,通常用于博客、新闻...

    RSS.rar_RSS_Rss browser_java rss_rss java_rss阅读器

    总之,这个“RSS_Rss browser_java rss_rss java_rss阅读器”项目涵盖了RSS订阅的基本原理,Java XML解析技术,以及GUI编程的实践。通过深入理解这些知识点,不仅可以帮助你理解RSS阅读器的工作机制,还能够提升你的...

    javaFx pdf 阅读软件

    下面我们将详细探讨JavaFX、icepdf以及如何使用这些技术构建一个PDF阅读器。 JavaFX是Oracle公司推出的用于创建桌面应用、移动应用和网页应用的Java库。它提供了丰富的图形用户界面(GUI)组件和强大的2D、3D渲染...

    java实现RSS阅读器

    本项目是一个用Java语言实现的RSS阅读器,具有用户界面(UI),方便用户交互。下面将详细阐述Java开发RSS阅读器的相关知识点。 1. **Java基础知识**: - **Java编程语言**:Java是一种面向对象的、跨平台的编程...

    基于Java的实例源码-XML写的RSS阅读器.zip

    标题中的“基于Java的实例源码-XML写的RSS阅读器.zip”表明这是一个使用Java编程语言开发的项目,其主要功能是解析和展示RSS(Really Simple Syndication) feed。RSS是一种XML格式,用于发布新闻、博客和其他定期...

    基于Java的XML写的RSS阅读器.zip

    标题中的“基于Java的XML写的RSS阅读器”指的是一个使用Java编程语言开发的软件应用程序,其功能是解析和展示RSS(Really Simple Syndication) feed。RSS是一种 XML 格式,常用于发布新闻、博客和其他定期更新的...

    基于Java实现的RSS阅读器

    RSS(Really Simple Syndication)是一种网络内容发布和聚合的标准,允许用户通过RSS阅读器订阅并获取网站的更新信息。在这个项目中,我们基于Java语言实现了RSS阅读器,它具备了基本的RSS源加载和更新检测功能,...

    JavaFX 简易音乐播放器

    这个项目,"JavaFX 简易音乐播放器",是一个基于JavaFX的简单音乐播放应用程序,非常适合初学者或者想要熟悉JavaFX特性的开发者进行学习和实践。 在JavaFX中,你可以使用丰富的API来创建吸引人的用户界面,包括按钮...

Global site tag (gtag.js) - Google Analytics