1

JavaFX Listview & Tableview Filtreleme ve Sıralama İşlemleri Bölüm – 2

Bir önceki bölümde Listview kontrolü için filtreleme yapmıştık bu bölümde ise Tableview kontrolü için yapacağız . Mantık noktasında pek bir fark yok yine observablelist oluşturup filteredList içine atacağız ve yine predicate tanımlayıp ilk seferde bütün elemanları almak için true döndüreceğiz. TextField ‘in setOnKeyReleased() metodunda girilen filtre metnini alıp yeni bir Predicate de kontrol edip uygunsa true döndürüp filtrelenmiş listeye ekleyeceğiz değilse false döndürüp listeye eklemeyeceğiz. yine bu bölümdede bir video çektim isterseniz ordan da izleyebilirsiniz. Kodları paylaşalım hemen. 

işte kodlar ve video …

import com.sun.javafx.binding.BidirectionalBinding;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;

import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.util.function.Predicate;


public class Main extends Application {



    ObservableList<Person> masterData=FXCollections.observableArrayList();

    TableView<Person> tableView=new TableView<>();
    FilteredList<Person> filteredList=new FilteredList<>(masterData);

    @Override
    public void init() throws Exception {
        super.init();

        masterData.add(new Person("Hans", "Muster"));
        masterData.add(new Person("Ruth", "Mueller"));
        masterData.add(new Person("Heinz", "Kurz"));
        masterData.add(new Person("Cornelia", "Meier"));
        masterData.add(new Person("Werner", "Meyer"));
        masterData.add(new Person("Lydia", "Kunz"));
        masterData.add(new Person("Anna", "Best"));
        masterData.add(new Person("Stefan", "Meier"));
        masterData.add(new Person("Martin", "Mueller"));

        TableColumn<Person,String> firstName=new TableColumn<>("ISIM");
        TableColumn<Person,String> lastName=new TableColumn<>("SOYADI");
        firstName.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
        lastName.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
        tableView.getColumns().addAll(firstName,lastName);

        Predicate<Person> getAllDataPredicate=new Predicate<Person>() {
            @Override
            public boolean test(Person person) {
                return true;
            }
        };

        filteredList.setPredicate(getAllDataPredicate);
        tableView.setItems(filteredList);




    }

    @Override
    public void start(Stage primaryStage) throws Exception {



        TextField textField=new TextField();
        VBox root=new VBox(tableView,textField);

        textField.setOnKeyReleased(event -> {

            Predicate<Person> filterPredicate=new Predicate<Person>() {
                @Override
                public boolean test(Person person) {

                    if(textField.getText().equals("") || textField.getText().isEmpty()){

                        return true;
                    }
                    if(person.getFirstName().toLowerCase().contains(textField.getText().toLowerCase())){
                        return true;
                    }

                    if(person.getLastName().toLowerCase().contains(textField.getText().toLowerCase())){
                        return true;
                    }
                    return false;
                }
            };

            filteredList.setPredicate(filterPredicate);
            tableView.setItems(filteredList);




        });


        Scene scene=new Scene(root,600,400);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Listview Filtereleme Uygulaması");
        primaryStage.show();





    }
}

Son olarak da tablonun kolon bazlı sıralanabilmesi için şöyle bir kod ekleyip ufak bir değişiklik yapacağız.

            filteredList.setPredicate(filterPredicate);

            SortedList<Person> sortedList=new SortedList<>(filteredList);
            sortedList.comparatorProperty().bind(tableView.comparatorProperty());

            tableView.setItems(sortedList);  // tableview'imize filteredList'i değilde sortedList'i set edelim

 

detayları video da anlattım

admin

One Comment

  1. merhaba . acaba tarih tablodaki tarih kolonunda iki tarih arasını nasıl filtreliyebilirim

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir