代码之家  ›  专栏  ›  技术社区  ›  John C

禁用JavaFX TableColumn

  •  0
  • John C  · 技术社区  · 7 年前

    有一个 TableColumn 定义为 TableColumn<Target, String> tableColumnLocation; 并按如下方式填充:

    tableColumnLocation.setCellValueFactory(new 
    PropertyValueFactory<Target, String>("name"));
    
    tableColumnLocation.setCellFactory(ComboBoxTableCell.forTableColumn(locationValues));
    

    哪里 locationValues 是从数据库读取的字符串集。 正在尝试禁用 tableColumnLocation 如果未选中其他复选框列,则下拉列表。所以问题是如何禁用 ComboBoxTableCell 。如有任何建议,将不胜感激。
    已经能够禁用其他 TableColumn表格列 如下所示,但不确定如何继续此操作。

    tableColumnQty.setCellFactory(
                         new Callback<TableColumn<Test, String>, TableCell<Test, String>>() {
    
                             @Override
                             public TableCell<Test, String> call(TableColumn<Test, String> paramTableColumn) {
                                 return new TextFieldTableCell<Test, String>(new DefaultStringConverter()) {
                                     @Override
                                     public void updateItem(String s, boolean b) {
                                         super.updateItem(s, b);
                                         if(!isEmpty()) {
                                             Test item = getTableView().getItems().get(getIndex());
                                             if (item.getTarget().equalsIgnoreCase("0")) {
                                                 setDisable(true);
                                                 setEditable(false);
                                                 this.setStyle("-fx-background-color: lightgrey");
                                             } else {
                                                 setDisable(false);
                                                 setEditable(true);
                                                 //if(s != null && !s.equalsIgnoreCase(""))
    
                                                 setStyle("");
                                             }
                                         }
                                     }
                                 };
                             }
    
                         });
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Piyush Mattoo    7 年前

    以下是您需要的:

    tableColumnLocation.setCellFactory(
                         new Callback<TableColumn<Target, String>, TableCell<Target, String>>() {
    
                             @Override
                             public TableCell<Target, String> call(TableColumn<Target, String> paramTableColumn) {
                                 return new ComboBoxTableCell<Target, String>(new DefaultStringConverter(), locationValues) {
                                     @Override
                                     public void updateItem(String s, boolean b) {
                                         super.updateItem(s, b);
                                         if(!isEmpty()) {
                                             Target item = getTableView().getItems().get(getIndex());
                                             if (check if checkbox is unselected) {
                                                 setDisable(true);
                                                 setEditable(false);
                                                 this.setStyle("-fx-background-color: lightgrey");
                                             } else {
                                                 setDisable(false);
                                                 setEditable(true);
                                                 setStyle("");
                                             }
                                         }
                                     }
                                 };
                             }
    
                         });