开发环境
【IntelliJ IDEA 2019.2 + jdk8】
先建一个基本工程
放置界面
先放一个Pane, 这是一个固定步骤,先要有一个容器,才能放TableView等其它控件。
放入TableView
若想增加列数,则加入TableColumn控件即可。
修改列名称:直接在右边的Properties --> Text 里输入新的名程即可。
添加数据
先填入一个 TableView的ID
然后,代码就可以根据这个ID,初始化变量,如下:
把Main.java里的代码改一下就行,其它的文件不用改。
Main.java如下:
package sample;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
public class Main extends Application {
public javafx.scene.control.TableView m_TableView;
public javafx.scene.control.TableColumn m_TableColumn_0;
public javafx.scene.control.TableColumn m_TableColumn_1;
public javafx.scene.control.TableColumn m_TableColumn_2;
public static void main(String[] args) {
launch(args);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 500, 500));
primaryStage.show();
m_TableView = (javafx.scene.control.TableView)root.lookup("#Id_TableView_1");
m_TableColumn_0 = (javafx.scene.control.TableColumn) m_TableView.getColumns().get(0);
m_TableColumn_1 = (javafx.scene.control.TableColumn) m_TableView.getColumns().get(1);
m_TableColumn_2 = (javafx.scene.control.TableColumn) m_TableView.getColumns().get(2);
m_TableColumn_0.setCellValueFactory(new PropertyValueFactory<Object, Object>("Name")); // 这里是大小写不敏感。
m_TableColumn_1.setCellValueFactory(new PropertyValueFactory<Object, Object>("value"));
m_TableColumn_2.setCellValueFactory(new PropertyValueFactory<Object, Object>("Unit"));
// 下面的代码可以重定义显示的格式,可以实现多行显示,等等,功能非常的强大。
// 参考: https://blog.csdn.net/asdinto/article/details/91524452?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase
m_TableColumn_2.setCellFactory(col->{
TableCell<Object, Object/*Double*/> cell = new TableCell<Object, Object/*Double*/>(){
@Override
public void updateItem(Object/*Double*/ item, boolean empty) {
super.updateItem(item, empty);
this.setText(null);
this.setGraphic(null);
if (!empty) {
int rowIndex = this.getIndex();
//double d = tbView.getItems().get(rowIndex).getWage();
//this.setText(StringUtils.formatNumber(2, d));
String src = item.toString();
String dst = new String();
for (int i=0; i<src.length(); i+=10){
int len = 10;
if (i + len > src.length())len = src.length() - i;
dst += src.substring(i, i+len);
dst += "\n";
}
this.setText(dst);
}
}
};
return cell;
});
// 第一种赋值法:
// m_TableView.getItems().add(new Person("人速", "100", "米"));
// m_TableView.getItems().add(new Person("马速", "高速度", "秒"));
// 第二种赋值法:
ObservableList<Person> data = FXCollections.observableArrayList(
new Person("1", "张三", "米12345679456877455555aaaabbb"),
new Person("2", "李四", "米"),
new Person("3", "王五", "米")
);
m_TableView.setItems(data);
data.get(0).setName("ooo");
}
// 这是我们数据里的对象--配角的配角
public static class Person {
private SimpleStringProperty Name;// 这里是大小写不敏感。
private SimpleStringProperty value;
private SimpleStringProperty Unit;
private Person(String name_in, String value_in, String Unit_in) {
this.Name = new SimpleStringProperty(name_in);
this.value = new SimpleStringProperty(value_in);
this.Unit = new SimpleStringProperty(Unit_in);
}
public String getName() {return Name.get();}
public void setName(String name_in) {Name.set(name_in);}
public String getValue() {return value.get();} // 变量在这里,头个字母必须大写。
public void setValue(String value_in) {value.set(value_in);}
public String getUnit() {return Unit.get();}
public void setUnit(String Unit_in) {Unit.set(Unit_in);}
}
}
以上代码参考自:《JavaFX+Jfoenix 学习笔记(三)--TableView数据表格源码》
程序运行效果如下:
格子自动调整大小
有时候,字符串特别长,放不下,那么,这时,该怎么办呢?
上面的写法尽可能地利用fxml来画图,很方便,但是有一点不是很好,就是样式一旦固定后,后面修改的余地不大,也是说,灵活性会缺失一点,下面介绍一种纯代码的写法。
纯代码写法