本着为老板赚跑车豪宅的原则,我们程序员需要啥就学啥,最近要把一个delphi旧项目重构成一个跨平台的项目,由于队伍里都是java程序员,技术选型上采用了JavaFX,不用swing的原因很简单,javaFx能跟boot联动。
1.创建项目
javaFx没什么好安装,我这里用的是java8,但是想创建javaFx项目得有java11,所有idea内置先下载下,再进行创建。
2.了解项目结构
3.修改java版本
我这里启动会报错,因为我电脑的环境变量java版本是8,所以我得修改项目的java版本。
这里要做四个步骤:
①project structure->project选择jdk8
②修改project structure->modules->languagelevel选择jdk8
③修改idea的settings->java compiler选择8
④删除文件(java8开发jfk不需要这个文件)
最后直接运行
3.使用介绍
3.1fxml
前端文件就像html可以自己写,也可以安装个Scene Builder自己拖控件。
onAction:表示事件
fx:controller="xxx":后端对应的文件
3.2controller
后端controller里面用到了@FXML:说明该变量或者方法可以在FXML文件中进行访问,就是表示这个变量和前端的文件是有关联,前提是这是了id
fx:id="welcomeText"
@FXML
private Label welcomeText;
4.样式介绍
4.1TableView
表格样式,先展示下简单效果,然后再来介绍使用。
接下来上代码,比较麻烦填充的时候是根据列来的。
//先定义表格和列元素
@FXML
/* 表格 */
private TableView<UserInfo> userInfoTableView;
/*【姓名列】*/
@FXML
private TableColumn<UserInfo, String> nameColumn;
/*【性别列】*/
@FXML
private TableColumn<UserInfo, String> sexColumn;
/*【年龄列】*/
@FXML
private TableColumn<UserInfo, String> ageColumn;
/*【爱好列】*/
@FXML
private TableColumn<UserInfo, String> hobbyColumn;
//每一行的记录,我这里直接构造了一个,一般情况读数据库吧
List<UserInfo> UserInfoList = new ArrayList<>(16);
UserInfo userInfo = new UserInfo ();
userInfo.setName("卢本伟");
userInfo.setSex("女");
userInfo.setAge("55");
userInfo.setHobby("pdd");
UserInfoList.add(userInfo);
//这里我封装了一个方法以便反复使用
fillCaseTable(UserInfoList);
/**
* 表格填充方法
*/
private void fillCaseTable(List<UserInfo> userInfoList) {
/*设置数据源*/
ObservableList<UserInfo> userListData = FXCollections.observableArrayList();
for (UserInfo info:userInfoList
) {
userListData.add(info);
}
//这里nameColumn等都是组件的id,“name”是对象的属性
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
sexColumn.setCellValueFactory(new PropertyValueFactory<>("sex"));
ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));
hobbyColumn.setCellValueFactory(new PropertyValueFactory<>("hobby"));
userInfoTableView.setItems(userListData);
log.info("设置完毕表格");
}
4.1.1序号列
增加序号列,可以给每个表格的每一行前面多个序号,这边的话我只上核心代码,其他都是前端构建的。countColumn就是我的其中一个表头。
countColumn.setCellFactory((col) -> {
TableCell<CaseInfo, String> cell = new TableCell<CaseInfo, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
//如果此列为空默认不添加元素
setText(null);
setGraphic(null);
if (!empty) {
this.setText(String.valueOf(this.getIndex() + 1));
}
}
};
return cell;
});
4.1.2表格样式设置
java编码修改
//表格内字体大小设置
testTableView.setStyle("-fx-font-size: 15px");
css样式
/*表头大小设置*/
.table-view .column-header .label{
-fx-font-size: large;
}