JavaFX-FXML
来源:互联网 发布:昌荣传播知乎 编辑:程序博客网 时间:2024/05/29 09:45
FXML Enhancements Made in JavaFX 2.1 and 2.2
JavaFX 2.1和2.2版本中,增加了如下改进:
* 提供前置反斜杠作为转意字符
JavaFX 2.0使用连续的操作字符作为转意字符,比如$$,%%,@@。在JavaFX 2.1中增加反斜杠作为转意字符,比如\$,\%,\@。这使转意字符再接近统一表达式语言(UEL), 并且开发人员更熟悉。JavaFX 2.0中的转意字符在JavaFX 2.1中被弃用。
* 控制文档命名空间的隐藏(implicit)变量
有一个特性双向绑定控件和UI。双向绑定在JavaFX 2.1中被抛弃,但这个特性被保留。
* 简化构建FXMLLoader类
FXMLLoader类增加了一些新的简单易用的构造函数。
* 可定制控件实例化
//以待日后补充
* 简化使用样式表(style sheets)
在JavaFX 2.0中,在FXML中应用样式表并不容易。但在JavaFX 2.1中,已经变得很简单。样式表可以作为属性被特别写到根元素<Scene>:
<Scene stylesheets="/com/foo/stylesheet1.css, /com/foo/stylesheet2.css"></Scene>
单个节点可以这样使用样式类型:
<Label styleClass="heading, firstPage" text="First Page Heading"/>
* 调用具体的无参数(Caller-specified no-arg)控件方法作为事件handler
在JavaFx 2.0,控件基础事件handler必须接收一个继承自Event类的参数,并返回void。在JavaFX 2.1,参数的限制被取消,我们可以写一个无参数的控件事件handler。
* <fx:constant>标签
我们可以在FXML中添加<fx:constant>标签来查找常量。比如,我们定义了名为NEGATIVE_INFINITY的Double类,现在引用它:
<Double fx:constant="NEGATIVE_INFINITY"/>
* FXML中方便访问子控件
在JavaFX 2.1及之前的版本,从根控件访问子控件并不是一件容易的事。
JavaFX 2.2映射被嵌套的控件作为成员变量,使用它可以更方便与嵌套控件相互作用。
<VBox fx:controller="com.foo.MainController">
...
<fx:include fx:id="dialog" source="dialog.fxml"/>
...
</VBox>
public class MainController extends Controller {
@FXML private Window dialog;
@FXML private DialogController dialogController;
...
}
Creating an Address Book with FXML
我们接下来创建一个包含名字和邮箱地址的表。并在表中填入数据,在启动时对数据排序,数据在单元格里自动对齐,增加新数据到表中。
在开始这个例子前,一些基础知识我们应该了解:
* FXML工程的基本结构(.java, .fxml, 和controller文件)
* 如何创建并运行FXML工程
* 基本的layout和UI控件
先来看看我们将要实现的工程运行结果是什么样子的
创建启动类----TableViewMain.java
public class TableViewMainextends Application{
@Override
publicvoid start(Stage primaryStage) throws Exception {
primaryStage.setTitle("FXML TableView Example");
Pane myPane = FXMLLoader.load(getClass().getResource("tableview.fxml"));
Scene myScene =new Scene(myPane);
primaryStage.setScene(myScene);
primaryStage.show();
}
publicstatic void main(String args[]){
launch(args);
}
}
建立layout并加入标签和表<GridPanealignment="CENTER"hgap="10.0"vgap="10.0"
xmlns:fx="http://javafx.com/fxml"
fx:controller="example.fxml.tableview.TableViewController">
<padding>
<Insetsbottom="10.0"left="10.0"right="10.0"top="10.0"/>
</padding>
<Labelstyle="-fx-font: NORMAL 20 Tahoma;"text="Address Book" GridPane.columnIndex="0"GridPane.rowIndex="0">
</Label>
<TableViewfx:id="tableView"GridPane.columnIndex="0"GridPane.rowIndex="1">
<columns>
<TableColumntext="First Name"></TableColumn>
<TableColumntext="Last Name"></TableColumn>
<TableColumntext="Email Address"></TableColumn>
</columns>
</TableView>
</GridPane>
定义数据模型public class Person {
privatefinal SimpleStringProperty firstName =new SimpleStringProperty("");
privatefinal SimpleStringProperty lastName =new SimpleStringProperty("");
privatefinal SimpleStringProperty email =new SimpleStringProperty("");
public Person() {
this("","", "");
}
public Person(String firstName, String lastName, String email) {
setFirstName(firstName);
setLastName(lastName);
setEmail(email);
}
public String getFirstName() {
returnfirstName.get();
}
publicvoid setFirstName(String fName) {
firstName.set(fName);
}
public String getLastName() {
returnlastName.get();
}
publicvoid setLastName(String lName) {
lastName.set(lName);
}
public String getEmail() {
returnemail.get();
}
publicvoid setEmail(String e) {
email.set(e);
}
}
将数据 与表关联起来创建ObservableList数组
</columns>
<items>
<FXCollectionsfx:factory="observableArrayList">
<PersonfirstName="Jacob"lastName="Smith"email="jacob.smith@aa.com"/>
<PersonfirstName="Isabella"lastName="Johnson"email="isabella.johnson@aa.com"/>
<PersonfirstName="Ethan"lastName="Williams"email="ethan.williams@aa.com"/>
</FXCollections>
</items>
</TableView>
为每一殒指定一个单元格工厂将数据关联起来
<columns>
<TableColumntext="First Name">
<cellValueFactory>
<PropertyValueFactoryproperty="firstName"/>
</cellValueFactory>
</TableColumn>
<TableColumntext="Last Name">
<cellValueFactory>
<PropertyValueFactoryproperty="lastName"/>
</cellValueFactory>
</TableColumn>
<TableColumntext="Email Address">
<cellValueFactory>
<PropertyValueFactoryproperty="email"/>
</cellValueFactory>
</TableColumn>
</columns>
引入所需的包<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.collections.*?>
<?import example.fxml.tableview.*?>
设定启动时排序
Add an ID to the First Name column:
<TableColumnfx:id="firstNameColumn"text="First Name">
Specify the sort order</items>
<sortOrder>
<fx:referencesource="firstNameColumn"/>
</sortOrder>
</TableView>
定义列宽度<TableColumnfx:id="firstNameColumn"text="First Name"prefWidth="100">
- JavaFX-FXML
- javafx之FXML初探
- JavaFx初探 fxml
- javafx中的控制器和fxml
- Combo Box JavaFx with FXML
- Combo Box JavaFx with FXML
- javafx fxml之右键菜单
- javafx fxml 最简示例
- JavaFX入门(二):JavaFX和FXML
- Javafx利用fxml的方式添加对话框
- JavaFX学习之道:FXML入门
- Swing中嵌入Fxml方式的JavaFX
- javaFX——基于FXML创建用户界面
- javafx fxml form javascript css Example
- 使用Fxml作为界面的javafx
- javafx加载不同包中的fxml文件
- JavaFX文档(9)掌握FXML——1 为何选择FXML
- JavaFX文档(11)掌握FXML——3 使用FXML来创建地址簿应用
- 平台调用P-INVOKE(三)--(封送结构体)
- 位图排序
- JEECG-页面按钮图标存放地址
- Java操作Excel文件以及在Android中的应用
- 修改phpmyadmin上传文件大小限制
- JavaFX-FXML
- vsftp进阶
- 关于stc51的冷启动下载和复位
- mapreduce对key值排序问题
- 三层架构
- 分层窗口实现千千静听的透明歌词
- 平台调用P-INVOKE高级篇(一)--(封送含有二维数组的结构体)
- 常用shell命令汇总
- Zynq加速设计日记-makefile分析