java - 过滤 tableView 在特定列中留下一些数据

标签 java javafx filter tableview nstableviewcell

我已经用列制作了表格 View ,一切正常。

我说过的一件事是,当我过滤行时,一些数据保留在我定义了其 cellFactory 的列中。

显示问题的图片:
enter image description here

列代码:

 @FXML
        private TableColumn<Log, Integer> colQuanJour;

colQuanJour.setCellValueFactory(new PropertyValueFactory<>("quantite"));

CellFactory 添加颜色和字符(+ 或 -)

colQuanJour.setCellFactory( 
               new Callback<TableColumn<Log,Integer>,TableCell<Log,Integer>>(){
           @Override
           public TableCell<Log, Integer> call(TableColumn<Log, Integer> param) {
              return new TableCell<Log, Integer>(){
                  @Override
                  protected void updateItem(Integer item, boolean empty) {
                      if( ! empty){
                         
                          int currIndex = indexProperty().getValue() < 0 ? 0 
                                  : indexProperty().getValue();
                          
                          int operIndex = param.getTableView().getItems().get(currIndex).getOperation().getId_operation();
                          setStyle("-fx-font-weight: bold");
                          String Char ;
                          if(operIndex == 2){
                              setStyle("-fx-font-size : 16px");
                              setStyle("-fx-text-fill : red");
                               Char = "-";
                          }else {
                              setStyle("-fx-font-size : 16px");
                              setStyle("-fx-text-fill : green");
                               Char = "+";
                          }
                          String val = String.valueOf(param.getTableView().getItems().get(currIndex).getQuantite());
                          setText(Char+val);
                      }
                  }
                  
              };
               
           }
        
        });

Log是一个包含属性数量(SimpleIntegerProperty)的pojo。

我的 table 是

TableView<Log> tblart;

过滤函数:

该函数从组合框中获取值来选择要过滤的列,默认情况下它会从所有表格中过滤,如下所示:

   void filterOneJour(String id,String newVal){
    ObservableList<Log> obsList = FXCollections.observableArrayList();

    for(Log jour : tblJour.getItems()){
                String num = String.valueOf(jour.getNum());
                String qte = String.valueOf(jour.        
                switch(id){
        
                    case "Numéro" : 
                        if(num.toUpperCase().contains(newVal))
                            obsList.add(jour);break;
                  
                    case "Quantité":
                        if(qte.toUpperCase().contains(newVal))
                            obsList.add(jour);break;
                  
                    default : 
                        if(num.toUpperCase().contains( qte.toUpperCase().contains(newVal) )
                            obsList.add(jour);
                }         
    }
    tblJour.setItems(obsList);
            
}

所以我希望一切都清楚,我认为问题来自 cellFactory,更确切地说是 updateItem。

最佳答案

是的,正如您提到的,问题来自 updateItem 方法。 TableView(实际上是 VirtualFlow)是通过使用相同的行/单元格来呈现的,以避免性能问题。将根据提供的项目调用行/单元格 updateItem。在您的情况下,您仅在该项目存在时添加以更新单元格,并在该项目为空时忽略它。因此单元格不会因空行而更新。

要解决您的问题..您需要添加else条件

colQuanJour.setCellFactory( 
               new Callback<TableColumn<Log,Integer>,TableCell<Log,Integer>>(){
           @Override
           public TableCell<Log, Integer> call(TableColumn<Log, Integer> param) {
              return new TableCell<Log, Integer>(){
                  @Override
                  protected void updateItem(Integer item, boolean empty) {
                      if( ! empty){
                          // Your code...
                          setText(Char+val);
                      }else{
                          setText(null); // This will clear the text for empty rows
                      }
                  }
              };
           }
        });

关于java - 过滤 tableView 在特定列中留下一些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58106199/

相关文章:

java - 如何创建 RowEncoder 以将 Tuple<A,Row> 映射到 Row?

javascript - 如何中断输入的 javascript 操作并开始新操作

java - 移动鼠标时 JPanel FPS 下降

java - 我的插入语句有什么问题? mysql 的 java

Java操作系统认证

java - 有没有办法在javafx WebView中播放flash?

java - 用选项填充组合框

java - 如何使选项卡 Pane 选项卡在面向左侧时旋转并可见?

haskell - 在 Happstack 路由过滤器中组合 GET 和 POST 部分

列表理解 : Even numbers from 0 to x