由于我在使用Java开发工具包1.7.0_04在Mac OSX 10.7上从Eclipse编译JavaFX代码时遇到问题,我只想与感兴趣的人分享我的中间解决方案:
问题:
当选择oracle发布的新jdk作为eclipse中的新jre/jdk时,无法识别jfxrt.jar和其他.jar文件.
jdk安装在/Library/Java/JavaVirtualMachines/1.7.0.jdk中,它被识别为包.
稍后添加路径/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/jfxrt.jar是不可能的,因为eclipse的文件打开对话框不允许导航到包的内部
解决方案:创建从包外部到包内的符号链接,并按照文件打开对话框中的链接进行操作.
只需转到终端并执行以下操作:
[0-/Library/Java/JavaVirtualMachines]:sudo ln -s 1.7.0.jdk/Contents/1.7.0.jdk_Contents
这将使用超级用户权限(sudo)创建符号链接1.7.0.jdk_Contents.
通过这种JavaFx代码的编译和执行工作正常并且如预期的那样.
我在MacOSX上使用java 1.7.0_04-b21在JavaFx 2.1中使用简单绑定开发了一个小应用程序.实际上我目前比较了Mac OSX上Cocoa与JavaFx的绑定机制,并面临几个问题:
该应用程序使用一个包含observableArrayList(称为messageList)的模型,该模型被设置为TableView的项目.添加新条目到列表工作.该条目出现在TableView中.
问题1:删除所选项目不起作用.当我从可观察列表中删除项目时,它不会消失.
问题2:我想用textView填充一个textField,该值存储在TableView中选择的对象的一个字段中.实际上,在Cocoa中,可以定义对选择的绑定,即使在绑定定义的时间点它是空的(因此没有选择任何内容).这实际上是一个非常有用的概念,我没有发现在JavaFX中这是如何实现的.
问题3:只有在已经选择了一个对象的情况下才能建立绑定,以便我最终编写一个EventHandler,对更改的选择做出反应并重新建立我的textfield到models字段的正确绑定.但是对于这种方法,我的应用程序由于某种原因而破坏模型,我现在还不明白.
只需单击添加按钮三到四次,然后选择条目并查看textField的更新.模型中的数据被破坏和覆盖 - 条目通常会变短......欢迎解释效果.
直到现在我在TableView上找不到绑定示例,所以欢迎任何输入.
我的演示项目的代码包含在以下文件中.所有这些都在com.es.javaFxTest包中.
MainWindowController.java:
/*
* Created on 19.05.2012
*/
package com.es.javaFxTest;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
public class MainWindowController implements Initializable
{
public Model model;
public TableView<Message> messageListTableView;
public TableColumn<Message, String> messageTableMessageNameColumn;
public Button addMessageButton;
public Button deleteMessageButton;
public …Run Code Online (Sandbox Code Playgroud)