JavaFX之ListView的使⽤ ListView是⼀个很常见的控件。在JavaFX中,ListView也拥有很丰富的功能。下⾯,我们来看看如何使⽤ListView。
ListView位于l包中,该包是包含javafx中的所有UI控件。
继承结构如下:
1.ListView的基础⽤法
ObservableList<String> strList = FXCollections.observableArrayList("红⾊","黄⾊","绿⾊");
ListView<String> listView = new ListView<>(strList);
listView.setItems(strList);
listView.setPrefSize(400, 200);
我们⾸先通过 FXCollections来创建我们ListView需要的数据填充。
通过setItems可以给ListView填充数据。同时设置ListView当前的⼤⼩。
显⽰效果如下:
2.ListView的选择事件
有时候,当我们点击ListView的Item的时候,我们进⾏相应的事件处理。
当然,ListView的事件同样是通过属性绑定机制来实现的,详情请见我的另外⼀篇⽂章:
下⾯是代码:
Label label = new Label("...");
label.setLayoutY(200);
这⾥只是简单的将label的text属性绑定到listview的 选择属性上⾯,当listview的选择改变时,label的⽂本跟着⼀起改变。 效果图:
同样的,我们可以对ListView的选择属性,添加改变事件,如下:
Label label = new Label("...");
label.setLayoutY(200);
(ObservableValue<? extends String> observable, String oldValue, String newValue) ->{
label.setText(newValue);
});
可以达到同样的效果。
这⾥使⽤了lambda表达式(后⾯其实是new ChangeListener来监听属性的改变)。没有⽤JDK 8的朋友们去下载吧。
3.ListView的编辑
同TableView⾥⾯Item可以编辑⼀样,ListView也提供这样的功能。只不过,我们需要改变ListView的CellFactory。
在上述⽰例中,我们只需要添加如下代码:
listView.setCellFactory(TextFieldListCell.forListView());
listView.setEditable(true);
我们将ListView的CellFactory设置为TextFieldListCell,来提供编辑功能。
在JavaFX中,提供了很多默认可以使⽤的Cell,⼤家可以⾃⼰去看⽂档l.cell包中。我就不⼀⼀列出来了。
效果图如下:
双击某个Item,就会进⼊编辑状态,按回车,编辑就完成。同时,选择属性也会改变。
如果你希望⾃⼰来控制ListView Item编辑的相关操作,这⾥也有三个事件:
setOnEditStart 编辑开始
setOnEditCommit 编辑完成
setOnEditCancel 编辑取消
这些事件会在你进⾏编辑的时候执⾏,有需求可以在这三个事件中做相应的处理。
4.ListView的⾃定义Item
不管怎么说,官⽅提供的ListView Cell不⼀定能满⾜我们的需求。我们通常会⾃定义ListCell来实现⾃⼰想要的效果。 这样,我们需要继承ListCell来实现⾃⼰的Cell。
代码如下所⽰:
//ListView的⾃定义
ObservableList<String> strList = FXCollections.observableArrayList("red","blue","gold");
ListView<String> listView = new ListView<>(strList);
listView.setItems(strList);
listView.setPrefSize(400, 200);
listView.setCellFactory((ListView<String> l) -> new ColorCell());
listView.setEditable(true);
Label label = new Label("...");
label.setLayoutY(200);
class ColorCell extends ListCell<String> {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
Rectangle rect = new Rectangle(100, 20);
if (item != null) {
rect.setFill(Color.web(item));
setGraphic(rect);
} else {
setGraphic(null);
}
}
}
我们通过继承ListCell,实现UpdateItem⽅法,来⾃定义每个Cell的内容。
效果图如下:
ListView的使⽤讲解就到这⾥了。基本上能⽤的到内容也都在这⾥了。下⼀节课再见。
-----------------------------------------------------------------------------------------------------------
有⼀段时间没有写博客了,也不知为何,总有点疲惫的样⼦。虽然公司体检,并⽆什么问题。看来,也可能是IT⾏业的通病,⼯作三年来,从每天精神抖擞,充满激情,到略有疲惫,激情褪去。有⼈说的那啥,时间是⼀把XX⼑。
个⼈⽹站之前⽤的WordPress,但是实在太不适合写代码了,经常更换主题,导致代码插件不兼容,显⽰效果各种坑爹。⼜是折腾插件,⼜是折腾这折腾那的,表⽰累了。⼀横⼼把wordpress数据库备份了下,就清空换Z-Blog了。虽然我也是IT⾏业,但仅仅只是想写点教程,写点⽂字,⽽不想继续花这么多时间折腾在这些⽆意义的事情上。
listview控件在哪里最近⽤Unity3D做了个⽂字游戏的模版,写脚本就可以完成游戏了。不过没有时间写剧本。
下⾯是截图:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论