JavaFX TableView和Java Beans Pattern Convention

Computer Science II 课上的作业老师要求完成一个Course Schedule的Exporter,在后台界面需要实现三个表格:Holiday Schedule, Lecture Schedule, Assignments Schedule。

某位同学忙活了半天好不容易创建了一个TableView,但是当edit表中的cell的时候,对应的值总是不变。昨天晚上看了十几分钟把我之前做错的点全部都过了一遍,依然找不到错误。不过秉承着死磕到底的精神,今天看了Oracle的TableView的教程和stackoverflow上同类问题的解答,终于有了一个解答的思路。真是山穷水复疑无路柳暗花明又一村!如果是正常的程序Bug那么就没有记录在博客上的意义了。因为其实这个Bug是不容易发现的,因为这个Bug产生的原因是因为JavaFX组件的机制造成的。

在这篇博文里我主要想写两个部分: JavaFX的TableView的简单实现和Java Beans Pattern Convention。

JavaFX TableView - Oracle JavaFX TableView Tutorial

创建TableView的主要操作:

1.创建Table

  首先构建表格的基本骨架:

  TableView table = new TableView();

  TableColumn firstNameCol = new TableColumn("first name"); // "first name"是这个TableColumn的title

  TableColumn lastNameCol = new TableColumn("last name");  // "last name"是这个TableColumn的title

  table.getColumns().addAll(firstNameCol, lastNameCol); // 将TableColumn“包裹”进table

  然后设置每一列表格的data type:

  //下面这两行分别初始化了每一列的数据类型. PropertyValueFactory<S, T>("nameInModel") 之中,S表示在数据模型(见下栏)之中的基本类型,T表示在表格之中显示的类型,nameInModel表示这个数据域在数据模型里面的变量名字。这些是Java Beans Pattern的约定俗成的规定,如果不按照这个标准来完成的表格就无法实现更改数据之后自动更新GUI界面。

  firstNameCol.setCellValueFactory(new PropertyValueFactory<String, String>("firstName")); //

  lastNameCol.setCellValueFactory(new PropertyValueFactory<String, String>("lastname"));

  

2.定义数据模型(Data Model)

  Public Class Person{

    final StringProperty firstName = new SimpleStringProperty(); // StringProperty是虚类, SimpleStringProperty是一个concrete class

    final StringProperty lastName = new SimpleStringProperty();

    // Getters Setters

    // 注意!下面这两个函数非常重要,因为Java beans(后面会介绍)的代码规范,Data Model Class的variable需要实现类似于 xProperty()这样的函数,x是变量名。

    public StringProperty firstNameProperty(){ return firstName; }

    public StringProperty lastNameProperty() { return lastName; }

  }

  之后我们要将创建一个ObservableList来存储这些Person的实例数据。

  ObservableList data = ... // 反正就加了person的实例进去了

3.数据模型和table关联

  table.setItems(data);

  好了,现在数据就和表格关联起来了!由于我们的数据是存在ObservableList里面的,所以每当表格里面有更改的时候,Table的view就会自动更新。

未完待续....

参考资料:

http://stackoverflow.com/questions/20048072/cant-fill-table-with-items-with-javafx
http://stackoverflow.com/questions/17035478/javafx-propertyvaluefactory-not-populating-tableview
http://blog.netopyr.com/2011/05/13/javafx-properties/
https://github.com/marcojakob/code.makery.ch/blob/master/collections/blog/14-05-10-update-to-javafx-8-whats-new.md
https://docs.oracle.com/javafx/2/ui_controls/table-view.htm

时间: 2024-08-09 20:26:47

JavaFX TableView和Java Beans Pattern Convention的相关文章

zoj 3714 Java Beans

#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<stack> #define mem(a,b) memset(a,b,sizeof(a)) #define ll __int64 #define MAXN 1000 #define INF

java之Pattern.compile相关正则表达式

java之Pattern.compile相关正则表达式 1.验证邮箱地址是否正确:String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; import java.util.regex.Matcher;//jar包 import java.util.regex.Pattern;//jar包 public static boolean chec

JAVA正则表达式 Pattern和Matcher

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它包括两个类:Pattern和Matcher . Pattern: 一个Pattern是一个正则表达式经编译后的表现模式. Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类

java.beans包的XMLEncoder和XMLDecoder实现实体与xml转换

package j2se.core.base;   import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.*; import java.util.ArrayList; import java.util.List;   /**  * Created by Lenovo on 2015/11/26.  */ public class XMLUtil {     /**      * 读取由objSourc

java.beans.PropertyChangeListener

1 import java.beans.PropertyChangeEvent; 2 import java.beans.PropertyChangeListener; 3 import java.beans.PropertyChangeSupport; 4 5 public class DemoBeans { 6 7 private String demoName; 8 private String Version; 9 PropertyChangeSupport listeners = ne

文字效果和表情图片:JAVA正则表达式 Pattern和Matcher、SpannableString与SpannableStringBuilder

在TextView和EditText加入表情或者设置文字效果可以使用: JAVA正则表达式 Pattern和Matcher SpannableString与SpannableStringBuilder

java design pattern - adapter pattern

场景 适配器模式 总结 参考资料 场景 在编程中我们经常会遇到驴头不对马嘴的情况,比如以前是继承A的接口的对象,现在外部调用的时候需要该对象已B接口的形式来调用 ,这个时候我们可以让对象同时集成A和B接口来达到目的,不过,这样又违反了开闭原则,这个时候我们可以使用适配器模式来达到目的. 适配器模式 适配器模式是一种结构模式,可以帮助我们把对象以不同的接口方式来调用.主要由3个角色组成: Target 外部调用要求的接口方式 Adapter 中间用来协调的适配器 Adaptee 原始对象 首先,我

Java正则表达式Pattern和Matcher详解

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它包括两个类:Pattern和Matcher . Pattern: 一个Pattern是一个正则表达式经编译后的表现模式. Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类

Java API —— Pattern类

正则表达式 写一个功能实现QQ号码的校验. import java.util.Scanner; public class RegexDemo01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入您的QQ号码:"); String str = sc.nextLine(); boolean f = queckQQ(str); Syst