受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
分享到:
相关推荐
javaFx pdf 阅读软件 。pdf文档的解析采用icepdf.
javafx写的记事本
QuickResize—基于Java8以及JavaFX写的图片压缩器
JavaFX的简易图片处理的源代码和项目文件
JavaFX 简易音乐播放器,适合javafx学习使用,导入eclipse直接使用
学校里办的JavaFX讲座时JavaFX的简易PPT,Sun同事主讲,加入了和WPF等的比较,开阔了眼界,非常好
基于javaFX的简易定制化的自动部署
用javafx写的一个小型项目,感兴趣的可以去下载,,,,,,,,
JavaFx PDF viewer ,javaFx显示PDF的控件 ,
javaFx pdf 阅读软件 。pdf文档的解析采用icepdf. 第一版地址(http://download.csdn.net/download/huangjiuyx/4410992)
结合面向对象的编程思想,学生自主学习JavaFX编程的主要内容,完成应用程序 编写一个图形化文本编辑器 1.用户启动软件后,能对普通文本类型的文件进行编辑 2.软件应该有,新建、打开、保存、复制、粘贴、剪切、退出...
这是我自己开发打包的第一个javafx软件,可以用于阅读csv文件。功能比较简单,但是让我熟悉了javafx开发windows桌面应用的编译打包过程。
JavaFX 做的简易音乐播放器,供大家一起共同分享学习。
javafx
一个基于JavaFX图形框架构建的简易Http请求工具,目前实现了GET, POST, PUT, DELETE四种Http请求方式 注意事项 当表中没有数据行可以输入时,点击表格可以添加一行空数据 GET, DELETE请求不支持发送请求体以及上传...
javafx 写的 在线MP3播放器,打开后会去网上自动下载
(3)点击“保存日志”按钮将所写日志以当前日志编辑区的日期为文件名(如20090411.txt)保存至磁盘中。 (4)点击“读取日志”按钮将从磁盘中找到指定日期的日志文件显示在日志编辑区中。 (5)点击“删除日志”...
javafx做的密码管理器,比上一版加了几个功能,修改了几个bug和不友好的特性,使用AES加密,xml存数据
javaFx写的卡牌游戏,可以移植到安卓上,目前iPhone上比较流行。