2015-02-11 6 views
7

मेरे पास मेरे एप्लिकेशन में एक सूची दृश्य है जिसमें स्ट्रिंग्स शामिल हैं। अब, मैं इस सूची को एक इनपुट फ़ील्ड द्वारा फ़िल्टर करना चाहता हूं। लेकिन मुझे मिली फ़िल्टर फ़िल्टर के बारे में सभी उदाहरण एक टेबल को फ़िल्टर करने के तरीके के बारे में हैं।एक सूची दृश्य में JavaFX FilteredList का उपयोग कैसे करें?

फ़िल्टर किए गए सूची का उपयोग करके मैं सूची दृश्य को कैसे फ़िल्टर कर सकता हूं?

उत्तर

11

यही नहीं बल्कि सरल और सीधा है:

@Override 
public void start(Stage primaryStage) { 

    ObservableList<String> data = FXCollections.observableArrayList(); 
    IntStream.range(0, 1000).mapToObj(Integer::toString).forEach(data::add); 

    FilteredList<String> filteredData = new FilteredList<>(data, s -> true); 

    TextField filterInput = new TextField(); 
    filterInput.textProperty().addListener(obs->{ 
     String filter = filterInput.getText(); 
     if(filter == null || filter.length() == 0) { 
      filteredData.setPredicate(s -> true); 
     } 
     else { 
      filteredData.setPredicate(s -> s.contains(filter)); 
     } 
    }); 


    BorderPane content = new BorderPane(new ListView<>(filteredData)); 
    content.setBottom(filterInput); 

    Scene scene = new Scene(content, 500, 500); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

इस लैम्ब्डा experssions का उपयोग किए बिना प्राप्त किया जा सकता है? मेरा जावा प्रोजेक्ट जावा 7 पर बनाया गया है। धन्यवाद। –

+0

@SachinGadagi बेशक। सबसे सरल मामले में: बस लैम्बों को अनाम आंतरिक कक्षाओं से प्रतिस्थापित करें। – eckig

+1

मुझे लैम्बडास पसंद है, यह 'filteredData.setPredicate (newValue.isEmpty()? S -> true: s -> s.getKey() में भी अधिक सरलीकृत हो सकता है। (NewValue)); ' –

संबंधित मुद्दे