यदि आप जावा 8 का उपयोग कर सकते हैं तो आप बिल्ट इन फ़िल्टर्डलिस्ट और विधेय का उपयोग कर सकते हैं। रेगेक्स फ़िल्टरिंग का परीक्षण करने के लिए मैंने यहां कुछ लिखा है। मैंने इसे आपके उदाहरण की तरह थोड़ा और संशोधित किया है और यदि आवश्यक हो तो javafx 2.2 का उपयोग करें। जावा 8 का उपयोग करने के लिए बस कुछ टिप्पणी की गई पंक्तियों को बदलें।
आयात करें javafx.collections.FXCollections;import javafx.collections.ObservableList;import javafx.collections.transformation.FilteredList;import javafx.event.ActionEvent;import javafx.scene.Scene;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;पब्लिक क्लास टेबलटेस्ट एप्लिकेशन का विस्तार करता है { @Override public void स्टार्ट (स्टेज प्राइमरीस्टेज) { ऑब्जर्वेबल लिस्ट <लाइनइटम> आइटम्स =FXCollections.observableArrayList (); items.addAll (नया लाइनइटम ("हैलो", 123.45), नया लाइनइटम ("पूर्ण में भुगतान किया गया", 0.01), नया लाइनइटम ("भुगतान", 0.01), नया लाइनइटम ("देय", 0.01), नया लाइनइटम (" भुगतान किया",0.01)); // Java8 के लिए // FilteredList filteredItems =new FilteredList(items, e->true); //नहीं java8 ऑब्जर्वेबललिस्ट filteredItems =FXCollections.observableArrayList(items); टेबल व्यू टेबल व्यू =नया टेबल व्यू (फ़िल्टर किए गए आइटम); TableColumn descCol =new TableColumn<>("desc"); descCol.setCellValueFactory (नई संपत्तिValueFactory<>("desc")); TableColumn amountCol =new TableColumn<>("amount"); राशि Col.setCellValueFactory (नई संपत्तिValueFactory<>("राशि")); tableView.getColumns().addAll(descCol,amountCol); टेक्स्टफिल्ड फिल्टरटेक्स्ट =नया टेक्स्टफिल्ड (); filterText.setPromptText ("फ़िल्टर टाइप करें और एंटर दबाएं"); filterText.setOnAction (नया EventHandler() {सार्वजनिक शून्य हैंडल (एक्शनइवेंट इवेंट) {//सामान्य java8 //filteredItems.setPredicate(li -> li.desc.getValue().contains(filterText.getText())); //regex जावा 8 //filteredItems.setPredicate(li -> li.desc.getValue().matches("(?i)"+filterText.getText ())); // javafx 8 नहीं; के लिए (LineItem li:items) if (li.desc.getValue().contains(filterText.getText())) filteredItems.add(li); } }); वीबॉक्स रूट =नया वीबॉक्स (); root.getChildren().addAll(tableView, filterText); दृश्य दृश्य =नया दृश्य (रूट, 300, 300); PrimaryStage.setTitle ("फ़िल्टर टेबल टेस्ट"); प्राइमरीस्टेज.सेटसीन (सीन); प्राइमरीस्टेज.शो (); } सार्वजनिक वर्ग लाइनइटम {निजी अंतिम स्ट्रिंगप्रॉपर्टी विवरण =नया सरलस्ट्रिंगप्रॉपर्टी (); निजी अंतिम डबलप्रॉपर्टी राशि =नई SimpleDoubleProperty (); सार्वजनिक स्ट्रिंगप्रॉपर्टी descProperty () {वापसी विवरण;} सार्वजनिक डबलप्रॉपर्टी राशिप्रॉपर्टी () {वापसी राशि;} सार्वजनिक लाइनइटम (स्ट्रिंग डीएससी, डबल एएमटी) {desc.set (डीएससी); राशि.सेट (एएमटी); } }}
टूडू, माना जाता है कि विधेय संपत्ति को बांधने का एक तरीका है, लेकिन मैं इसका पता नहीं लगा सकता।
संपादित करें:यदि आप एक्शनएवेंट के लिए हैंडलर के बजाय बाध्यकारी चाहते हैं, तो कुछ ऐसा करें
filteredItems.predicateProperty().bind(Bindings.createObjectBinding(() -> li -> li.desc.getValue().contains(filterText.getText()), filterText.textProperty()));