TableView表 

   TableColumn列 

构建一个表主要有TableView,TableColumn,ObservableList,Bean。 

加入列table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); 

ObservableList里面是存放的数据 

table.setItems(observableList);加入数据 

observableList里面通常是存放的Bean,列与Bean之间建立联系,从而获取值。 

列与Bean之间建立联系: 

emailCol.setCellValueFactory(new PropertyValueFactory<Person, String>("email"));通过cell值工厂建立与Bean的联系。它这里并不须要知道你是传了什么Bean,它仅仅须要通过“email”反射成getEmail()方法去Bean里面获得值,所以Bean属性定义的名字不须要与它同样,仅仅须要有getEmail()方法。

  1. firstNameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
  2. @Override
  3. public ObservableValue<String> call(CellDataFeatures<Person, String> arg0) {
  4. // return new
  5. // SimpleStringProperty(arg0.getValue(),"sd",arg0.getValue().getFirstName());
  6. // //bean, bean的名称,值
  7. return new SimpleStringProperty(arg0.getValue().getFirstName());
  8. // 这样你能够不建立值与对象的映射关系。

  9. }
  10. });

arg0.getValue()等于这里的person。若是你observableList.add(list),则这arg0.getValue()等于list。 

SimpleStringProperty(arg0.getValue(),"sd",arg0.getValue().getFirstName()); 

这里的意思既是arg0.getValue()既是你observableList.add的值。“sd”为bean取得名字,arg0.getValue().getFirstName()既是你该列想要获得的值。假设是list则arg0.getValue().get(j)则为该列的每行赋值了。 



cell里面不仅仅仅存放文字,还能够存放其他Node:

  1. firstNameCol.setCellFactory(new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
  2. @Override
  3. public TableCell<Person, String> call( // 单元格内容
  4. TableColumn<Person, String> arg0) {
  5. return new TableCell<Person, String>() {                @Override
  6. protected void updateItem(final String str,boolean arg1) {
  7. super.updateItem(str, arg1);
  8. if (arg1) {                            setText(null);
  9. setGraphic(null);
  10. else {                                 setText(str);
  11. setGraphic(new CheckBox());
  12. }
  13. }
  14. }
  15. });

和TreeCell使用一样,能够对cell里面弄又一次构造。

lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());有一些默认的构造,就不须要自己去new TableCell了。 



TableColumn设置sort的3个方法 

firstNameCol.setSortNode(new Text("a")); // 默认是表头上的小图标三角形,能够改变 

firstNameCol.setSortable(true); // 设置可排序 

firstNameCol.setSortType(SortType.DESCENDING);设置升降序 



若要在一个column中包括多个column。则能够调用TableColumn的getColumns().setAll(TableColumn...);

  1. firstNameColumn = new TableColumn<Person, String>("First");
  2. firstNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName"));
  3. //        firstNameColumn.setCellFactory(TextFieldCellFactory.<Person>forTableColumn());
  4. lastNameColumn = new TableColumn<Person, String>("Last");
  5. lastNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName"));
  6. //        lastNameColumn.setCellFactory(TextFieldCellFactory.<Person>forTableColumn());
  7. nameColumn = new TableColumn<Person, String>("Name");
  8. nameColumn.getColumns().setAll(firstNameColumn, lastNameColumn);

table的单元之间有明显的横线切割,能够通过css去掉。

去掉行横线

  1. .table-view .table-row-cell {
  2. ;
  3. }

若想同一时候去掉没有数据的竖线

  1. .table-row-cell:empty .table-cell {
  2. -fx-border-width: 0px;
  3. }

若想对行进行操作,能够通过setRowFactory。如以下对行的双击进行操作

  1. tableView.setRowFactory(new Callback<TableView<T>, TableRow<T>>() {
  2. @Override
  3. public TableRow<T> call(TableView<T> param) {
  4. return new TableRowControl();
  5. }
  6. });
  7. class TableRowControl extends TableRow<T> {
  8. public TableRowControl() {
  9. super();
  10. this.setOnMouseClicked(new EventHandler<MouseEvent>() {
  11. @Override
  12. public void handle(MouseEvent event) {
  13. if (event.getButton().equals(MouseButton.PRIMARY)
  14. && TableRowControl.this.getIndex() < tableView.getItems().size()) {
  15. //doSomething
  16. }
  17. }
  18. });
  19. }
  20. }

往table中插入数据。table中的数据显示,是依据你的itemlist来的。list里面的数据排什么序,那table也就排什么序。若加入一条新数据,直接往list里面加。

而list又提供按位置加,那么table显示就是按位置加了。

  1. tableView.getItems().add(selectedRow, newRecord);

newRecord一个新的对象,没赋值。 



自己定义TableCell一般都是重写updateItem方法。假设有须要在编辑做操作,能够重写startEdit,cancelEdit

  1. @Override
  2. public void startEdit() {
  3. if (!this.getTableRow().isVisible()) {
  4. return;
  5. }
  6. super.startEdit();
  7. if (checkBox == null) {
  8. createCheckBox();
  9. }
  10. setText(null);
  11. setGraphic(checkBox);
  12. }
  13. @Override
  14. public void cancelEdit() {
  15. super.cancelEdit();
  16. setText(getItem().toString());
  17. setGraphic(null);
  18. }

能够看到,一旦点击编辑状态,则改变Cell里面的内容。一离开编辑就换成原本cell里面的内容。这样就能够显示的时候就是字符串,而编辑的时候就能够弄一个控件。如日历。 



获取选中的TableColumn

  1. ).getTableColumn()

table自带方法能够过滤column,也就是仅仅显示哪些column

  1. table.setTableMenuButtonVisible(true);

设置为true后,会出现一个加号的column,它能够对column进行过滤 



table默认是仅仅能选着一行的,假设想选着多行。设置SelectionMode,此时能够对选中的多个进行监听。

  1. ListChangeListener<Person> indicesListener = new   ListChangeListener<Person>() {
  2. @Override public void onChanged(Change<? extends Person> c) {
  3. while (c.next()) {
  4. selectionUpdated(c.getAddedSubList(), c.getRemoved());
  5. }
  6. }
  7. };
  8. tableView.getSelectionModel().getSelectedItems().addListener(indicesListener);
  9. tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

tableView.getSelectionModel()得到的是个抽象类SelectionModel。它有二个子类MultipleSelectionModel, SingleSelectionModel。

它们主要处理选择事件,能够看它们的方法:

  1. getSelectedIndex()
  2. getSelectedItem()
  3. selectedIndexProperty()
  4. selectedItemProperty()

获取选中的item和索引。一个是获取其值,还有一个是获取封装属性,用于bind变化。

  1. select(int index)
  2. select(T obj)
  3. selectFirst()
  4. selectLast()
  5. ...
  6. clearSelection()
  7. clearSelection(int index)

这些方法都是操作选中。

  1. setSelectionMode(SelectionMode.MULTIPLE);
  2. selectIndices(int index, int... indices)
  3. selectRange(int start, int end)

MultipleSelectionModel则提供多选功能,而且提供多选的一些方法。

  1. select(int row, TableColumn<S,?

    > column)

  2. selectAboveCell()
  3. selectBelowCell()
  4. selectLeftCell()
  5. selectRightCell()
  6. setCellSelectionEnabled(boolean value)

TableView.TableViewSelectionModel<S>是继承了MultipleSelectionModel,主要针对table的选中事件提供了一些方法。 









这里有非常多javafx的小游戏,一个高手写的 

http://lustrezhang.gotoip4.com/fxgame/ 



这里有个javafx学习的中文站点,我把内容都丢那上面去了。 

http://www.jfxee.com/

JavaFX学习之道:JavaFX之TableView的更多相关文章

  1. 【javaFX学习】(二) 面板手册--1

    找了好几个资料,没找到自己想要的,自己写个列表吧,方便以后用的时候挑选,边学边记.以学习笔记为主,所以会写的会偏个人记忆性.非教程,有什么问题一起讨论啊. 各个不同的控件放入不同的面板中有不同的效果, ...

  2. javafx基于使用fxml布局的tableview数据绑定用法

    来个简单明了的 fxml的tableview数据绑定和java代码方式的数据绑定很像,不同的在于要有一到映射 首先看个目录 1.界面文件Sample.fxml <?xml version=&qu ...

  3. javafx将数据库内容输出到tableview表格

    一 .创建Fxml文件,用Javafx Scene Builder 编辑页面,创建tableview(表格)和tablecolum(表格中的列),并为其设置fxid: 二.生成fxml文件的控制类: ...

  4. 【javaFX学习】(二) 面板手册

    移至http://blog.csdn.net/qq_37837828/article/details/78732591 更新 找了好几个资料,没找到自己想要的,自己整理下吧,方便以后用的时候挑选,边学 ...

  5. JavaFX学习之路:详细解释JavaFX架构和框架

    JavaFX 2.0平台是基于Java技术的富client平台.它使应用程序开发人员更加easy的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包括了JavaFX 2.0所提供的功 ...

  6. 【javaFX学习】(一) 建一个简单的界面

    转载注明出处:http://www.cnblogs.com/lensener/p/7976953.html 用过swing都知道有多蛋疼,界面有多丑.自从用了javaFX,腰也不酸了,腿也不疼了. 废 ...

  7. javaFx 学习笔记

    1.每个javaFx程序定义在一个继承自javafx.application.Application的类中 Button:用于设置一个按钮,Button btOK = new Button(" ...

  8. Linux快速入门打开你的学习之道

    Linux快速入门打开你的学习之道 相信看到这篇文章的你一定是想要学习Linux,或者已经在学习Linux的人了,那我们就可以一起探讨一下,学习Linux如何快速入门呢? 首先,希望大家弄清楚自己为什 ...

  9. JavaFX桌面应用-SpringBoot + JavaFX

    SpringBoot对于Java程序员来说可以是一个福音,它让程序员在开发的时候,大大简化了各种spring的xml配置. 那么在JavaFX项目使用SpringBoot会是怎么样的体验呢? 这次使用 ...

随机推荐

  1. Android 中View的绘制机制源代码分析 二

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/46842891 本篇文章接着上篇文章的内容来继续讨论View的绘制机制,上篇文章中我们主要解说 ...

  2. Oracle学习(二):过滤和排序

    1.知识点:能够对比以下的录屏进行阅读 SQL> --字符串大写和小写敏感 SQL> --查询名叫KING的员工信息 SQL> select * 2 from emp 3 where ...

  3. C# WebQQ协议群发机器人(二)

    本文出处http://blog.csdn.net/zhujunxxxxx/ 如需转载请注明出处! 接着上一篇http://blog.csdn.net/zhujunxxxxx/article/detai ...

  4. h5-爆料view

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdsAAABeCAIAAADkEim8AAAWAElEQVR4nO2d+1Nb55nHPbMz+1v+g/ ...

  5. 分析性能瓶颈的视图:v$session_wait

    这是一个寻找性能瓶颈的关键视图.它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件).当系统存在性能问题时,本视图可以做为一个起点指 ...

  6. Modules:手机号码验证

    ylbtech-Modules:手机号码验证 手机号码验证,文档以JFB项目架构为原型,介绍实现原理,如何调用和应用实例. 架构包括5个主要模块:Basebase,Base,Service,Api和W ...

  7. luogu 1593 因子和

    因子和 题目描述 输入两个正整数a和b,求\(a^b\)的因子和.结果太大,只要输出它对9901的余数. 解法 基本算数定理,每一个数都可以被分解成一系列的素数的乘积,然后你可以分解出因数了. 如何求 ...

  8. 通过配置host,自定义域名让本地访问

    最近服务器这块一直由我来维护,我们开发的项目很多域名根本没有解析,而是仅仅配置了host,就可以本地访问服务器了.感觉很有意思,于是乎,打算试一试.结果弄了许久,最后第二天才解决了.把这个艰辛的旅程记 ...

  9. node.js连接数据库登录注册,修改用户(页面的ajax请求)

    首先给大家看一下目录结构,结构如下: index.html 首页(显示所有的用户信息) login.html 登录页 register.html 注册页 db.js 配置链接数据库参数 dbhelpe ...

  10. SQL SERVER中的sys.objects和sysobjects的区别

    这三个视图都是存在于SQL Server的每个数据库中.在SQL Server 2000中,它们都是系统表,而不是视图. 关于两个版本中系统表和系统的视图的对应关系,参考:http://technet ...