2016-11-18 10 views
0

FX Tableviewで項目数をフィルタリングして表示しようとしています。JavaFxでテーブルビュー項目数のサイズを検出するにはどうすればよいですか?

spesificデータを一覧表示するためのいくつかのボタンとTXTフィールドはテキスト入力

here is

あります

クリアボタンをフィルタリング:ここgettingenterコードデフォルト値

今月ボタン:今月の値を取得するには

データピッカー:任意の日の値を取得するため

テーブルアイテムのサイズを示すラベルがあります

public Label lblRecordSize; 

私の問題です。 フィルタリングするすべての操作の下でlblRecordSize.settext()になりたくありません。

public class CenterDbController implements Initializable { 

    public AnchorPane centerDbPanelPane; 

    /** */ 
    public TextField txtSerialNo; 
    public ComboBox<EModemModel> cbxModemModel; 
    public Label lblRecordSize; 
    public DatePicker dpStartDate; 
    public DatePicker dpEndDate; 
    public Button btnShow; 
    public Button btnClear; 

    /** */ 
    public TableView<RecordedTest> tblvRecords; 
    public TableColumn colRecordId; 
    public TableColumn colOfficeId; 
    public TableColumn colCompany; 
    public TableColumn colModemSerialNumber; 
    public TableColumn colModemBrand; 
    public TableColumn colModemModel; 
    public TableColumn colSoftwareVersion; 
    public TableColumn colAccessTest; 
    public TableColumn colSoftwareTest; 
    public TableColumn colDhcpTest; 
    public TableColumn colWifiTest; 
    public TableColumn colInternetTest; 
    public TableColumn colResetTest; 
    public TableColumn colTestResult; 
    public TableColumn colSendStatus; 
    public TableColumn colRecordDate; 
    public TableColumn colTestDetails; 

    /** */ 
    private IRecordedTestService recordedTestService; 
    private FilteredList<RecordedTest> filteredList; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 

     initCellFactories(); 

     recordedTestService = UtilsForSpring.getSingleBeanOfType(IRecordedTestService.class); 
     filteredList = new FilteredList<>(FXCollections.observableList(recordedTestService.getThisMonthRecords()), s -> true); 
     tblvRecords.setItems(filteredList); 
     lblRecordSize.textProperty().bind(Bindings.size(tblvRecords.getItems()).asString("%s")); 
//  lblRecordSize.setText(filteredList.size() + ""); 

     filteredList.addListener(new ListChangeListener<RecordedTest>() { 
      @Override 
      public void onChanged(Change<? extends RecordedTest> c) { 
//    lblRecordSize.setText(filteredList.size() + ""); 
      } 
     }); 


     cbxModemModel.getItems().addAll(EModemModel.values()); 


    } 


    private void initCellFactories() { 

     colRecordId.setCellValueFactory(new PropertyValueFactory<RecordedTest, String>("recordId")); 
     colOfficeId.setCellValueFactory(new PropertyValueFactory<>("officeId")); 
     colCompany.setCellValueFactory(new PropertyValueFactory<>("company")); 
     colModemSerialNumber.setCellValueFactory(new PropertyValueFactory<>("modemSerialNumber")); 
     colModemBrand.setCellValueFactory(new PropertyValueFactory<>("modemBrand")); 
     colModemModel.setCellValueFactory(new PropertyValueFactory<>("modemModel")); 
     colSoftwareVersion.setCellValueFactory(new PropertyValueFactory<>("softwareVersion")); 

     colAccessTest.setCellValueFactory(new PropertyValueFactory<>("accessTest")); 
     colSoftwareTest.setCellValueFactory(new PropertyValueFactory<>("softwareTest")); 
     colDhcpTest.setCellValueFactory(new PropertyValueFactory<>("dhcpTest")); 
     colWifiTest.setCellValueFactory(new PropertyValueFactory<>("wifiTest")); 
     colInternetTest.setCellValueFactory(new PropertyValueFactory<>("internetTest")); 
     colResetTest.setCellValueFactory(new PropertyValueFactory<>("resetTest")); 
     colTestResult.setCellValueFactory(new PropertyValueFactory<>("testResult")); 
     colSendStatus.setCellValueFactory(new PropertyValueFactory<>("sendStatus")); 

     colRecordDate.setCellValueFactory(new PropertyValueFactory<>("recordDate")); 
     colTestDetails.setCellValueFactory(new PropertyValueFactory<>("testDetails")); 

    } 

    public void btnClearOnClickAction(ActionEvent e) { 

     txtSerialNo.clear(); 
     cbxModemModel.getSelectionModel().clearSelection(); 
     dpEndDate.setValue(null); 
     dpStartDate.setValue(null); 

     filteredList = new FilteredList<>(FXCollections.observableList(recordedTestService.getThisMonthRecords()), s -> true); 
     tblvRecords.setItems(filteredList); 
//  lblRecordSize.setText(filteredList.size() + ""); 

    } 

    public void btnShowOnClickAction(ActionEvent e) { 

     if (dpStartDate.getValue() != null && dpEndDate != null) { 
      filteredList = new FilteredList<>(FXCollections.observableList(recordedTestService.getBetweenRecords(dpStartDate.getValue(), dpEndDate.getValue()))); 
      tblvRecords.setItems(filteredList); 
     } 
    } 


    public void tableOnSortListener() { 


//  lblRecordSize.setText(tblvRecords.getItems().size() + ""); 
    } 

    public void txtSerialNoOnKeyPress() { 

     txtSerialNo.textProperty().addListener(observable -> { 
      String filter = txtSerialNo.getText(); 
      if (filter == null || filter.length() == 0) { 
       filteredList.setPredicate(s -> true); 
      } else { 
       filteredList.setPredicate(s -> s.getModemSerialNumber().contains(filter)); 
      } 
     }); 
    } 

    public void cbxModemModelOnValueChange() { 

     String filter = cbxModemModel.getSelectionModel().getSelectedItem().toString(); 
     if (filter == null || filter.length() == 0) { 
      filteredList.setPredicate(s -> true); 
     } else { 
      filteredList.setPredicate(s -> s.getModemModel().equalsIgnoreCase(filter)); 
     } 
    } 

} 

答えて

0

Bindings classはあなたがObservableListの大きさのためにバインディングを作成することができますsize方法を提供し、 UPDATEDなどtableview.onItemSizeChangeListener()

のようなリスナーがあります。

// after assigning the items 
lblRecordSize.textProperty().bind(Bindings.size(tableview.getItems()).asString("Record count: %s")); 

編集

:既存のリストを変更し、新しいものとあなたは(例えば FilteredListを使用して)フィルタリングするたびに、それを交換しないと仮定すると、あなたは Labelテキストをバインドするためにこれを使用することができます

コードでは、アイテムリストを置き換えます。 prequesite itemsあなたはまた、単一のリストを変更することができしかし

あなたは代わりにアイテムのプロパティにリスナーを追加し、Labelテキストを毎回

// before setting items the first time 
tblvRecords.itemsProperty().addListener((observable, oldItems, newItems) -> 
              lblRecordSize.textProperty().bind(
                Bindings.size(newItems).asString())); 

を再バインドすることができ...与えられていない置き換えられていません毎回リストを再作成するのではなく、ソースデータを格納することができます。

private final ObservableList<RecordedTest> data = FXCollections.observableArrayList(); 
private final FilteredList<RecordedTest> filteredList = new FilteredList<>(data); 

@Override 
public void initialize(URL location, ResourceBundle resources) { 

    initCellFactories(); 

    recordedTestService = UtilsForSpring.getSingleBeanOfType(IRecordedTestService.class); 
    filteredList.setPredicate(null); 
    data.setAll(recordedTestService.getThisMonthRecords()); 
    tblvRecords.setItems(filteredList); 
    lblRecordSize.textProperty().bind(Bindings.size(filteredList).asString()); 
    ... 
} 

... 

public void btnClearOnClickAction(ActionEvent e) { 
    ... 

    filteredList.setPredicate(null); 
    data.setAll(recordedTestService.getThisMonthRecords())); 
} 
+0

ありがとうございます。 –

+0

@enesあなたはあなたのリストを置き換えるので、これは動作しません。あなたが 'TableView'の' items'プロパティの変更を聞いたり聞いたりしないで、 'Label'の' text'プロパティを置き換えられるたびに再バインドするなら、それはうまくいくはずです。答えを編集しました。 – fabian

+0

ありがとう、私の仕事です! :) –

関連する問題