受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 代码
- package rssreader;
-
- import com.sun.syndication.feed.synd.SyndEntry;
- import com.sun.syndication.feed.synd.SyndFeed;
- import com.sun.syndication.io.FeedException;
- import com.sun.syndication.io.SyndFeedInput;
- import com.sun.syndication.io.XmlReader;
- import java.io.IOException;
- import java.net.MalformedURLException;
- import java.net.URL;
-
- public class RssReader {
- private URL url;
- private Integer titleLength = 50;
-
- public RssReader() {
-
- }
-
- public SyndEntry[] load(String urlString) throws IllegalArgumentException, FeedException, IOException {
- if (urlString != null && urlString != "") {
- try {
- url = new URL(urlString);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- return null;
- }
- }
- if (url == null) {
- return null;
- }
- SyndFeedInput input = new SyndFeedInput();
- SyndFeed feed = input.build(new XmlReader(url));
- SyndEntry[] entries = (SyndEntry[]) feed.getEntries().toArray(new SyndEntry[0]);
-
- for( SyndEntry entry : entries ) {
- entry.setTitle( entry.getTitle().length() > titleLength ? entry.getTitle().substring(0, titleLength - 3 ) + "..." : entry.getTitle() );
- }
-
- return entries;
- }
-
-
- }
使用JavaFX构建UI:
JavaFX代码
- package rssreader;
-
- import javafx.ui.*;
- import javafx.ui.canvas.*;
- import javax.swing.JComponent;
- import com.sun.syndication.feed.synd.SyndEntry;
-
- var reader:RssReader = READER;
-
- class RssReaderModel {
- attribute rssUrl: String;
- attribute rssEntries: SyndEntry*;
- attribute rssContent: String?;
- attribute rssSelectedIndex: Integer;
- }
-
- var model = RssReaderModel {
- rssUrl: "http://woodstudio.iteye.com/blog/rss_blog/alexcheng",
- };
-
-
- var panel = GroupPanel {
- var row1 = Row {}
- var row2 = Row {}
- var col = Column {}
- rows: [row1, row2]
- columns: col
- content:
- [
- GroupPanel {
- row: row1
- column: col
- var row = Row {}
- var labelCol = new Column
- var urlCol = new Column
- var butCol = new Column
- rows: row
- columns: [labelCol, urlCol, butCol]
- content:
- [
- SimpleLabel {
- row: row
- column: labelCol
- text: "RSS URL:"
- },
- TextField {
- row: row
- column: urlCol
- columns: 60
- value: bind model.rssUrl
- },
- Button {
- row: row
- column: butCol
- text: "Get Entries"
- action: operation() {
- model.rssEntries = reader.load(model.rssUrl);
- }
- }
- ]
- },
- SplitPane {
- row: row2
- column: col
- orientation: HORIZONTAL
- content:
- [
- SplitView {
- weight: 0.3
- content:
- Table {
- columns:
- [
- TableColumn {
- text: "Title"
- },
- TableColumn {
- text: "Date"
- },
- ]
- cells : bind foreach (entry in model.rssEntries)
- [
- TableCell {
- text: bind entry.title
- },
- TableCell {
- text: bind entry.publishedDate.toLocaleString()
- }
- ]
- selection: bind model.rssSelectedIndex
- }
- },
- SplitView {
- weight: 0.7
- content:
- EditorPane {
- opaque: true
- contentType: HTML
- editable: false
- text: bind model.rssContent
- }
- }
- ]
- }
- ]
- };
-
- trigger on (RssReaderModel.rssSelectedIndex = value) {
- var desc = rssEntries[value].description.value;
- rssContent = "<html><body> {desc} </body></html>";
- }
-
- MY_CONTAINER:JComponent.add(panel.getComponent());
-
-
接着就是使用JSR223的scripting framework来执行:
java 代码
- package rssreader;
-
- import javax.script.Bindings;
- import javax.script.ScriptContext;
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- import javax.script.SimpleScriptContext;
- import javax.swing.JFrame;
-
- public class Main {
-
-
-
-
-
- public static void main(String[] args) throws Exception {
- RssReader reader = new RssReader();
-
- JFrame frame = new JFrame(
- "RSS Reader implemented using JavaFX by alexcheng");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setSize(800, 600);
-
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- ScriptEngineManager manager = new ScriptEngineManager(loader);
- ScriptEngine engine = manager.getEngineByExtension("fx");
-
- Bindings bindings = engine.createBindings();
- bindings.put("READER:rssreader.RssReader", reader);
-
- bindings.put("MY_CONTAINER:javax.swing.JComponent", frame
- .getContentPane());
-
- ScriptContext context = new SimpleScriptContext();
- context.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);
- context.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
- engine.setContext(context);
-
- String script = "import rssreader.FxMain;";
- engine.eval(script);
-
- frame.setVisible(true);
- }
-
- }
最后的界面如下:

- 描述: JavaFX RSS Reader
- 大小: 74.1 KB
分享到:
相关推荐
【简易RSS阅读器】是一个基于Java编程语言开发的应用程序,主要功能是解析和展示RSS(Really Simple Syndication) feed,让使用者能够方便地获取和阅读网络上的新闻、博客或者其他更新内容。RSS是一种XML格式的数据...
在本例中,Java+XML写的RSS阅读器源码可能通过百度网盘作为分享途径,提供给其他开发者或用户下载和使用。由于涉及到网络分享链接,用户需要输入正确的分享码才能访问到相应的资源。分享码通常是唯一的,用于确保...
利用Java的多种类库和框架,比如JavaFX或Swing用于UI设计,JDOM或DOM4J用于XML解析,Apache HttpClient用于网络通信等,可以实现一个功能完备的RSS阅读器。同时,借助于Java的反射机制、多线程和网络编程技术,还...
智慧城市-2012年NEC智慧城市解决方案.zip
IBMERP实施应收模块业务方案和用户操作手册手册超详.doc
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
JAVA保存计算过程的计算器课程设计报告样本.doc
scratch少儿编程逻辑思维游戏源码-像素任务.zip
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
scratch少儿编程逻辑思维游戏源码-死亡锯.zip
内容概要:本文档介绍了一套完整的FPGA工程项目资料包,涵盖了单精度浮点数运算(加减乘除、开方)、浮点数与整数互转以及PID控制算法的Verilog实现。每个项目都包含了详细的工程代码、测试平台(testbench)和相关说明文件。此外,还提供了MATLAB文件用于验证PID算法的准确性,以及一个小工具用于浮点数和整数的转换。所有代码均为纯Verilog编写,不依赖于任何IP核,便于用户自定义修改和优化。 适合人群:对FPGA开发感兴趣的电子工程师、硬件开发者、科研人员及高校师生。 使用场景及目标:① 学习和掌握FPGA环境下单精度浮点数运算的基本原理及其具体实现方法;② 探索并理解PID控制算法在实际系统中的应用;③ 利用提供的MATLAB文件和小工具辅助教学或研究工作。 其他说明:资料包内的所有工程均可直接在Altera平台上进行仿真测试,帮助使用者快速入门并深入理解各个模块的功能特性。
IBM企业内容管理解决方案.doc
小雉系统分卷源码,修正系统安全问题
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
scratch少儿编程逻辑思维游戏源码-我的 scratch 旅行.zip