2012-06-06 18 views
6

से तालिका दृश्य में ऑटोअपडेटिंग पंक्तियां मैं तालिका तालिका में ताज़ा डेटा के बारे में जानकारी देख रहा हूं। मैं सीधे मॉडल को संशोधित करने की कोशिश कर रहा था, लेकिन मुझे एक बग मिला। मैं मॉडल को संशोधित करता हूं, लेकिन तालिका ताज़ा नहीं होती है, केवल तभी जब मैं कॉलम ले जाता हूं, तालिका संशोधित मान दिखाती है।मॉडल

आपको एक उदाहरण दिखाने के लिए (13-6) मैं ट्यूटोरियल ले:

http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJABIEED

और मैं एक बटन सहित इसे संशोधित और अपनी कार्रवाई में:

Button button = new Button("Modify"); 
button.setOnAction(new EventHandler<ActionEvent>() { 
@Override 
public void handle(ActionEvent arg0) { 
    String name = table.getItems().get(0).getFirstName(); 
    name = name + "aaaa"; 
    table.getItems().get(0).setFirstName(name); 
    } 
}); 

final VBox vbox = new VBox(); 
vbox.setSpacing(5); 
vbox.getChildren().addAll(label, table, button); 
vbox.setPadding(new Insets(10, 0, 0, 10)); 

मुझे लगता है कि लगता है यह टेबलव्यू में एक बग है, लेकिन क्या इसे ठीक करने का कोई मौका है?

धन्यवाद!

उत्तर

21

टेबलव्यू को डेटा परिवर्तनों को ट्रैक करने में सक्षम बनाने के लिए आपको जावाफ़ैक्स गुणों के रूप में प्रासंगिक फ़ील्ड का खुलासा करने की आवश्यकता है। ट्यूटोरियल से Person वर्ग के बगल में तरीकों जोड़ें:

public SimpleStringProperty firstNameProperty() { 
     return firstName; 
    } 

    public SimpleStringProperty lastNameProperty() { 
     return lastName; 
    } 

    public SimpleStringProperty emailProperty() { 
     return email; 
    } 
+2

यह बस काम करता है। यह वही है जो मैं खोज रहा था। धन्यवाद! –

+1

बढ़िया! मुझे लगता है कि यह प्रतिबिंब के साथ काम करता है, इसलिए यह महत्वपूर्ण है कि संपत्ति प्राप्तकर्ताओं का सही नाम [विशेषता] संपत्ति() हो। मेरे मामले में मुझे [विशेषता] संपत्ति() मिल गई थी, इसलिए यह अपडेट नहीं हो रहा था। धन्यवाद! –

3

वहाँ tableview अद्यतन में एक बग (https://javafx-jira.kenai.com/browse/RT-22463) है। मुझे भी इसी तरह की समस्या थी और कुछ खोज के बाद यह मेरा कामकाज है। मैंने पाया कि यदि कॉलम हटा दिए जाते हैं और फिर तालिका को फिर से जोड़ा जाता है तो अपडेट किया जाता है। उपयोग के

public static <T,U> void refreshTableView(TableView<T> tableView, List<TableColumn<T,U>> columns, List<T> rows) {   
    tableView.getColumns().clear(); 
    tableView.getColumns().addAll(columns); 

    ObservableList<T> list = FXCollections.observableArrayList(rows); 
    tableView.setItems(list); 
} 


उदाहरण:

refreshTableView(myTableView, Arrays.asList(col1, col2, col3), rows);