मैं कस्टम ListView सेल मैं दो नियंत्रण के साथ HBox है है:JavaFX 8 कस्टम ListView कोशिकाओं यह बुराई है
- नाम क्षेत्र के साथ लेबल
- यह वस्तु
के संदर्भ उदाहरण के लिए से उत्पन्न होगा मैं कक्षा फ़ील्ड की ListView आइटम सरणी सेट करता हूं, यदि फ़ील्ड प्रकार बूलियन मैं चेकबॉक्स बना देता हूं, अगर स्ट्रिंग मैं टेक्स्टफिल्ड और इत्यादि बना रहा हूं
समस्या यह है: मुझे फ़ील्ड ऑब्जेक्ट केवल विधि अद्यतन में मिलता है Item() - और केवल वहां मैं अपने नियंत्रण बना सकता हूं।
जावाएफएक्स 7 में सभी ठीक काम करते हैं, लेकिन जावा 8 पर - मैं अपने नियंत्रण नहीं देखता हूं।
मेरे मामले को हल करने का सही तरीका मौजूद है?
अद्यतन 1
दोहराने समस्या के लिए यहाँ पूर्ण उदाहरण:
package javafx8listviewexample;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.Date;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.DatePicker;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.TextFieldListCell;
import javafx.util.Callback;
/**
*
* @author dmitrynelepov
*/
public class FXMLDocumentController implements Initializable {
static class TestClassForListView {
public String fieldString;
public Date fieldDate;
}
static class MyListCell extends ListCell<Field> {
/**
* As in tutorial
*
* @param t
* @param bln
*/
@Override
protected void updateItem(Field t, boolean bln) {
super.updateItem(t, bln);
if (t != null) {
if (t.getType().equals(String.class)) {
System.out.println("Draw string");
setGraphic(new TextField(t.getName()));
} else if (t.getType().equals(Date.class)) {
System.out.println("Draw Date");
setGraphic(new DatePicker());
}
}
}
}
@FXML
private ListView<Field> listView;
@FXML
private void handleButtonAction(ActionEvent event) {
this.listView.getItems().clear();
this.listView.setItems(
FXCollections.observableArrayList(
TestClassForListView.class.getFields()
)
);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
this.listView.setCellFactory(new Callback<ListView<Field>, ListCell<Field>>() {
@Override
public ListCell<Field> call(ListView<Field> p) {
return new MyListCell();
}
});
}
}
यहां कार्यक्रम JDK के स्क्रीनशॉट 7
के रूप में यू देख सकते हैं मैं TextField ध्यान केंद्रित किया जा सकता है और संपादित किया।
लेकिन मैं
के रूप में यहाँ यू देख सकते हैं TextField केंद्रित है और संपादित किया जा नहीं कर सकते मिला अगर मैं JDK 8 के साथ इस उदाहरण चलाते हैं।
विश्लेषण के लिए पूर्ण, न्यूनतम कोड आपके मुद्दे को दोहराने के लिए महत्वपूर्ण है। यदि आप अपने विशेष कार्यान्वयन के साथ और सहायता चाहते हैं और किसी को यह जांचना और समझाया जाना चाहिए कि यह क्यों काम नहीं करता है, तो आपको एक संपादित प्रश्न में [एसएससीसीई] (http://sscce.org) के रूप में समस्या को दोहराने के लिए कोड रखना होगा)। – jewelsea
हालांकि सवाल बहुत उपयोगी है, क्या आप शीर्षक को अपडेट कर सकते हैं? Javafx8 में कस्टम ListCell ऑब्जेक्ट्स के बारे में आपको इतना बुरा लगता है कि इसे अधिक सटीक रूप से प्रतिबिंबित करना चाहिए। – demongolem