JavaFX tableview可编辑单元格
我目前正在尝试创建一个JavaFX应用程序,用户可以在每个单元格中写入数字,并在以后对其进行处理。JavaFX tableview可编辑单元格,java,javafx,cells,Java,Javafx,Cells,我目前正在尝试创建一个JavaFX应用程序,用户可以在每个单元格中写入数字,并在以后对其进行处理。 当前我的表如下所示(0是默认值): 每个单元格都应该是可编辑的,并且只接受数字(精确地说是双倍) 我的代码如下所示: 在tableview中使用的My类(用该类的6个对象填充tableview) 和我的控制器初始化表 public class ViewController implements Initializable { @FXML private TableView<
当前我的表如下所示(0是默认值): 每个单元格都应该是可编辑的,并且只接受数字(精确地说是双倍)
我的代码如下所示: 在tableview中使用的My类(用该类的6个对象填充tableview) 和我的控制器初始化表
public class ViewController implements Initializable {
@FXML
private TableView<Week> fxTable;
//Table Elements
TableColumn<Week,Double> Mo;
TableColumn<Week,Double> Tu;
TableColumn<Week,Double> We;
TableColumn<Week,Double> Th;
TableColumn<Week,Double> Fr;
TableColumn<Week,Double> Sa;
TableColumn<Week,Double> Su;
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
staticInit();
createTableCols();
fillTable();
}
public void createTableCols() {
Mo = new TableColumn<Week, Double>("Mo");
Mo.setResizable(false);
Mo.setSortable(false);
Mo.setCellValueFactory(new PropertyValueFactory<Week, Double>("Monday"));
Tu = new TableColumn<Week, Double>("Tu");
Tu.setResizable(false);
Tu.setSortable(false);
Tu.setCellValueFactory(new PropertyValueFactory<Week, Double>("Tuesday"));
We = new TableColumn<Week, Double>("We");
We.setResizable(false);
We.setSortable(false);
We.setCellValueFactory(new PropertyValueFactory<Week, Double>("Wednesday"));
Th = new TableColumn<Week, Double>("Th");
Th.setResizable(false);
Th.setSortable(false);
Th.setCellValueFactory(new PropertyValueFactory<Week, Double>("Thursday"));
Fr = new TableColumn<Week, Double>("Fr");
Fr.setResizable(false);
Fr.setSortable(false);
Fr.setCellValueFactory(new PropertyValueFactory<Week, Double>("Friday"));
Sa = new TableColumn<Week, Double>("Sa");
Sa.setResizable(false);
Sa.setSortable(false);
Sa.setCellValueFactory(new PropertyValueFactory<Week, Double>("Saturday"));
Su = new TableColumn<Week, Double>("Su");
Su.setResizable(false);
Su.setSortable(false);
Su.setCellValueFactory(new PropertyValueFactory<Week, Double>("Su"));
fxTable.getColumns().addAll(Mo,Tu,We,Th,Fr,Sa,Su);
//prevent user to move the cols
fxTable.getColumns().addListener(new ListChangeListener() {
public boolean suspended;
@Override
public void onChanged(Change change) {
change.next();
if (change.wasReplaced() && !suspended) {
this.suspended = true;
fxTable.getColumns().setAll(Mo,Di,Mi,Do,Fr,Sa,So);
this.suspended = false;
}
}
});
}
public void fillTable () {
Week wT1 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT2 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT3 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT4 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT5 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT6 = new Week(0, 0, 0, 0, 0, 0, 0);
ObservableList<Week> emptyList = FXCollections.observableArrayList();
emptyList.addAll(wT1,wT2,wT3,wT4,wT5,wT6);
fxTable.setItems(emptyList);
}
}
公共类ViewController实现可初始化{
@FXML
私有TableView表;
//表元素
表列Mo;
tabletu;
表列我们;
表格;
表列Fr;
表A列;
表柱素;
公共void初始化(URL fxmlFileLocation,ResourceBundle资源){
staticInit();
createTableCols();
fillTable();
}
public void createTableCols(){
Mo=新表列(“Mo”);
Mo.setresizeable(false);
Mo.setortable(假);
Mo.setCellValueFactory(新物业价值工厂(“周一”);
Tu=新表列(“Tu”);
Tu.setresizeable(假);
Tu.setSortable(假);
Tu.setCellValueFactory(新物业价值工厂(“星期二”);
We=新表列(“We”);
We.setresizeable(false);
We.setSortable(false);
我们。setCellValueFactory(新物业价值工厂(“星期三”);
Th=新表列(“Th”);
Th.可设置大小(假);
Th.可设置可选项(假);
Th.setCellValueFactory(新物业价值工厂(“星期四”);
Fr=新表列(“Fr”);
Fr.setresizeable(假);
Fr.setSortable(假);
Fr.setCellValueFactory(新物业价值工厂(“星期五”);
Sa=新表列(“Sa”);
Sa.可设置大小(false);
Sa.可设置可编程(假);
Sa.setCellValueFactory(新物业价值工厂(“星期六”);
Su=新表列(“Su”);
Su.可设置大小(false);
Su.setSortable(假);
Su.setCellValueFactory(新财产价值工厂(“Su”));
fxTable.getColumns().addAll(Mo、Tu、We、Th、Fr、Sa、Su);
//防止用户移动COL
fxTable.getColumns().addListener(新ListChangeListener()){
暂停公共服务;
@凌驾
更改后的公共作废(更改){
change.next();
if(change.wasplacement()&&!suspended){
this.suspended=true;
getColumns().setAll(Mo、Di、Mi、Do、Fr、Sa、So);
这一点是错误的;
}
}
});
}
公共空白填充表(){
第wT1周=新的一周(0,0,0,0,0,0,0);
周wT2=新的一周(0,0,0,0,0,0,0);
第wT3周=新的一周(0,0,0,0,0,0,0);
第wT4周=新的一周(0,0,0,0,0,0,0);
第wT5周=新的一周(0,0,0,0,0,0,0);
第wT6周=新的一周(0,0,0,0,0,0,0);
ObservableList emptyList=FXCollections.observableArrayList();
addAll(wT1、wT2、wT3、wT4、wT5、wT6);
fxTable.setItems(emptyList);
}
}
我怎样才能做到这一点?我是javaFX的新手,所以帮助会很好。
提前问候和感谢您可以查看此问题,了解如何使表格可编辑:至于只接受数字,这是另一个问题。请尽量将您的问题仅限于一个特定问题。欢迎来到SO!:)(您还需要为每一列设置
onEditCommit
,因为您在Week
..中不使用与您的问题无关的属性:请学习java命名约定并遵守它们
public class ViewController implements Initializable {
@FXML
private TableView<Week> fxTable;
//Table Elements
TableColumn<Week,Double> Mo;
TableColumn<Week,Double> Tu;
TableColumn<Week,Double> We;
TableColumn<Week,Double> Th;
TableColumn<Week,Double> Fr;
TableColumn<Week,Double> Sa;
TableColumn<Week,Double> Su;
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
staticInit();
createTableCols();
fillTable();
}
public void createTableCols() {
Mo = new TableColumn<Week, Double>("Mo");
Mo.setResizable(false);
Mo.setSortable(false);
Mo.setCellValueFactory(new PropertyValueFactory<Week, Double>("Monday"));
Tu = new TableColumn<Week, Double>("Tu");
Tu.setResizable(false);
Tu.setSortable(false);
Tu.setCellValueFactory(new PropertyValueFactory<Week, Double>("Tuesday"));
We = new TableColumn<Week, Double>("We");
We.setResizable(false);
We.setSortable(false);
We.setCellValueFactory(new PropertyValueFactory<Week, Double>("Wednesday"));
Th = new TableColumn<Week, Double>("Th");
Th.setResizable(false);
Th.setSortable(false);
Th.setCellValueFactory(new PropertyValueFactory<Week, Double>("Thursday"));
Fr = new TableColumn<Week, Double>("Fr");
Fr.setResizable(false);
Fr.setSortable(false);
Fr.setCellValueFactory(new PropertyValueFactory<Week, Double>("Friday"));
Sa = new TableColumn<Week, Double>("Sa");
Sa.setResizable(false);
Sa.setSortable(false);
Sa.setCellValueFactory(new PropertyValueFactory<Week, Double>("Saturday"));
Su = new TableColumn<Week, Double>("Su");
Su.setResizable(false);
Su.setSortable(false);
Su.setCellValueFactory(new PropertyValueFactory<Week, Double>("Su"));
fxTable.getColumns().addAll(Mo,Tu,We,Th,Fr,Sa,Su);
//prevent user to move the cols
fxTable.getColumns().addListener(new ListChangeListener() {
public boolean suspended;
@Override
public void onChanged(Change change) {
change.next();
if (change.wasReplaced() && !suspended) {
this.suspended = true;
fxTable.getColumns().setAll(Mo,Di,Mi,Do,Fr,Sa,So);
this.suspended = false;
}
}
});
}
public void fillTable () {
Week wT1 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT2 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT3 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT4 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT5 = new Week(0, 0, 0, 0, 0, 0, 0);
Week wT6 = new Week(0, 0, 0, 0, 0, 0, 0);
ObservableList<Week> emptyList = FXCollections.observableArrayList();
emptyList.addAll(wT1,wT2,wT3,wT4,wT5,wT6);
fxTable.setItems(emptyList);
}
}