JavaFX tableview可编辑单元格

JavaFX tableview可编辑单元格,java,javafx,cells,Java,Javafx,Cells,我目前正在尝试创建一个JavaFX应用程序,用户可以在每个单元格中写入数字,并在以后对其进行处理。 当前我的表如下所示(0是默认值): 每个单元格都应该是可编辑的,并且只接受数字(精确地说是双倍) 我的代码如下所示: 在tableview中使用的My类(用该类的6个对象填充tableview) 和我的控制器初始化表 public class ViewController implements Initializable { @FXML private TableView<

我目前正在尝试创建一个JavaFX应用程序,用户可以在每个单元格中写入数字,并在以后对其进行处理。
当前我的表如下所示(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);    
    }
}