2017-09-24 1 views
0

선택 상자를 사용하여 테이블 뷰의 특정 데이터를 표시하려고합니다. 내가 테이블 뷰에 "name" "Price" "Category" "Stock"라는 4 개의 열을 가지고 있다고 가정 해 보겠습니다. 내 tableview는 .txt 문서에서 데이터를 가져오고, 내 GUI에서 텍스트 필드를 통해 데이터를 추가 할 수 있습니다. My choicebox는 "Category 1" "Category 2" "Category 3"값을 보유하고 있으며 내 tableview는 6 행 3 행에 카테고리 2가있는 데이터를 보유하고 있습니다.ChoiceBox를 사용하여 TableView JavaFX의 특정 데이터 표시

내가 원하는 것 할 일은, 내 선택 상자에서 카테고리 1을 선택하면 내 tableview는 카테고리 1의 데이터 만 표시해야합니다. 나는 완전히 잃어버린다.

내 코드.

private TableView<DTOArt> table = new TableView<DTOArt>(); 
private ObservableList<DTOArt> data = FXCollections.observableArrayList(); 
private ObservableList filCat = FXCollections.observableArrayList("Category 1","Category 2","Category 3"); 

public VBox getTableView(){ 
VBox tabelView = new VBox(); 
    tabelView.setSpacing(5); 
    tabelView.setPadding(new Insets(10,10,10,10)); 

    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

    table.setEditable(true); 

    TableColumn nameCol = new TableColumn("Name"); 
    nameCol.setCellValueFactory(new PropertyValueFactory<DTOArt, String>("name")); 

    TableColumn priceCol = new TableColumn("Price"); 
    priceCol.setCellValueFactory(new PropertyValueFactory<DTOArt, String>("price")); 

    TableColumn categoryCol = new TableColumn("Category"); 
    categoryCol.setCellValueFactory(new PropertyValueFactory<DTOArt, String>("category")); 

    TableColumn inStockCol = new TableColumn("in Stock"); 
    inStockCol.setCellValueFactory(new PropertyValueFactory<DTOArt, String>("inStock")); 


    table.setItems(data); 

    table.getColumns().addAll(nameCol,priceCol,categoryCol,inStockCol); 

    tabelView.getChildren().add(table); 

    return tabelView; 
} 

My choiceBox.

ChoiceBox categoryCB = new ChoiceBox(); 
categoryCB.setItems(filCat); 
categoryCB.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>(){ 

     @Override 
     public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue){ 


      } 

    }); 

답변

0

FilteredList에있는 모든 항목의 목록을 감쌀 수 있습니다. 이렇게하면 Predicate을 지정하여 항목을 필터링 할 수 있습니다. 당신이 범주를 변경 동적으로 허용 할 경우

private final ObservableList<DTOArt> data = FXCollections.observableArrayList(); 

private final FilteredList<DTOArt> filteredData = new FilteredList<>(data); 
ChoiceBox<String> categoryCB = new ChoiceBox<>(); 
categoryCB.setItems(filCat); 
categoryCB.valueProperty().addListener(new ChangeListener<String>(){ 

    @Override 
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue){ 
     filteredData.setPredicate(newValue == null ? null : (DTOArt e) -> newValue.equals(e.getCategory())); 
    } 

}); 
table.setItems(filteredData); 

은 또한, 당신은 ObservableList

private final ObservableList<DTOArt> data = FXCollections.observableArrayList((DTOArt e) -> new Observable[] { e.categoryProperty() }); 
에 대한 추출기를 사용한다
관련 문제