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()方法。

Java代码  
  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:

Java代码  
  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...);

Java代码  
  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去掉。

去掉行横线

Java代码  
  1. .table-view .table-row-cell {
  2. -fx-background-insets: 0;
  3. }

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

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

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

Java代码  
  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. && event.getClickCount() == 2
  15. && TableRowControl.this.getIndex() < tableView.getItems().size()) {
  16. //doSomething
  17. }
  18. }
  19. });
  20. }
  21. }

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

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

Java代码  
  1. tableView.getItems().add(selectedRow, newRecord);

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

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

Java代码  
  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

Java代码  
  1. table.getSelectionModel().getSelectedCells().get(0).getTableColumn()

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

Java代码  
  1. table.setTableMenuButtonVisible(true);

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

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

Java代码  
  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。

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

Java代码  
  1. getSelectedIndex()
  2. getSelectedItem()
  3. selectedIndexProperty()
  4. selectedItemProperty()

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

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

这些方法都是操作选中。

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

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

Java代码  
  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学习之道:布局面板之 HBox

    HBox 布局面板可以很方便的让所有控件都排列成一行. 可以通过设置 padding 属性来设置控件与 HBox 边缘之间的距离.可以通过设置 spacing 属性来设置各个控件之间的距离.可以设置 ...

  2. mysql tableveiw与表格,javafx将数据库内容输出到tableview表格

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

  3. JAVAFX学习笔记

    首先,javafx有点像前端,我们可以把他理解为这样的结构 分别为 窗口:就是显示的窗口 场景:相当于页面,整个可操作的大小,估计可以切换不同场景 节点:就是内部各个模块,自己一个个设置 代码如下 p ...

  4. javaFX学习之Menu下创建子菜单及菜单项的例子

    使用RadioMenuItem来创建子菜单的菜单项.将RadioMenuItem类型菜单项添加到ToggleGroup(互斥切换组)类型对象中,使各个RadioMenuItem类型菜单项的选中是相互排 ...

  5. 学习笔记:Javafx获取系统中已经安装的字体

    方法:利用javafx.scene.text.Font创建字体 通过所创建Font实例,调用getFamilies()方法,返回值为字体集名字的列表(List<String>) 此处需要创 ...

  6. javafx学习教程

    1.舞台,场景,布局,控件,回调 2.舞台:窗口,一个舞台一个窗口,舞台有舞台基础属性,舞台监听事件,做一些回调 3.fxml里面可以写 页面的布局,控件,然后在主程序里面显示页面,舞台,场景 然后 ...

  7. javaFx学习之分页控件Pagination

    原文链接:DOC-03-27 分页控件(Pagination Control) | JavaFX中文资料 JavaFX程序中添加分页(Pagination)控件.它会告诉你如何向程序中添加Pagina ...

  8. javaFX学习之Accordion和TitledPane组件的配合使用

    原文链接:DOC-03-23 标题面板(Titled Pane)和可折叠面板(Accordion) | JavaFX中文资料 javaFX应用程序中组合使用Accordion和TitlePane Ti ...

  9. javaFX学习笔记之 散布图(Scatter Chart)

    (Scatter Chart),它是一种用一组点来表示数据的双轴图表. 每个点通过X和Y值来定义.跟其他双轴图表类似,你可以创建一组或者多组数据.图展示了一个带有三组数据的Scatter Chart. ...

最新文章

  1. 树莓派开发4-串口通讯wiringpi库
  2. java web编码详解_java web 开发 编码问题详解
  3. docker piwik
  4. 经典C语言程序100例之五五
  5. C++ Multisets
  6. 从字节码层面分析==比较integer和int
  7. 微信公众平台开发——在线点歌
  8. 华为mate40会不会有鸿蒙系统,鸿蒙OS系统正式推送,拿华为Mate40更新后,发现了优缺点...
  9. linux telnet无法连接,奇怪的问题:telnet无法连接另一台server的正常的开放端口
  10. Windows Mobile 获取来电号码和屏蔽来电
  11. jsp中java代码、jsp代码、js代码执行的顺序
  12. 微信公众号笔记(一)
  13. 模拟点击框架网页内无id无name的按钮
  14. 【Unity3D实战】摇摆直升机开发实战(一)
  15. 上海科技大学和 计算机,上海容易被忽略的高校--上海科技大学,本科升学率近80%,力压复旦、上交!...
  16. 黑苹果电源键睡眠关机的分析及解决办法
  17. 高中计算机听课总结,中学新信息技术老师听课心得体会五篇
  18. 基于面部视频的心率监测系统 day 10
  19. 嵌入式与通用计算机的相同点,嵌入式计算机与通用计算机的区别与联系
  20. nant_强制NAnt使用.NET Framework的特定版本进行构建和运行

热门文章

  1. 如何利用python进行数据分析统计服_利用Python进行数据分析
  2. np.reshape带给我的内存错误
  3. 用c语言输出26个英文字母,菜鸟求助,写一个随机输出26个英文字母的程序
  4. hadoop本地模式部署_hadoop启动模式、基本配置、启动方式
  5. c语言放空一个数组,C++语言
  6. js修改video的source_利用 javascript MediaSource 将 HTML video标签的src转成加载blob
  7. 路由器 radius认证获取ip_玩转网络工程师·认证篇
  8. linux ls 输出对齐,理解 Linux 中 `ls` 的输出
  9. php保存设置,php如何实现编辑和保存文件?
  10. 在AWS S3的连接过程中发生java.lang.BootstrapMethodError: call site initialization exception