2015-07-09 23 views
5

मैं JavaFX TableView में कॉलम में दो अलग-अलग डेटासेट डालना चाहता हूं। असल में मेरे पास स्ट्रिंग्स के साथ 2 लिंक्डलिस्ट हैं और मैं एक सूची को एक कॉलम में और दूसरे को दूसरे में रखना चाहता हूं।कॉलम में डेटा जोड़ने का सरल तरीका

ऐसा करने का सबसे आसान तरीका क्या है? या इसके लिए एक और जावाएफएक्स तत्व बेहतर है?

केवल समाधान जो मैंने पाया है वे पंक्तियों में डाले गए संग्रहों पर आधारित थे, जो मैं नहीं करना चाहता हूं।

उत्तर

9

मैं दृढ़ता से आपके डेटा को पुनर्गठित करने की अनुशंसा करता हूं, ताकि आपके पास दो गुणों वाला एक वर्ग हो, जिसमें से एक आपकी पहली सूची का एक तत्व है, और दूसरा आपकी दूसरी सूची से संबंधित तत्व है। फिर आप उस वर्ग की वस्तुओं की एक सूची बना सकते हैं, और आप सामान्य मामले में कम हो जाते हैं।

उदा। मान लीजिए कि आप

// your first list: 
List<Integer> intList = ... ; 
// your second list: 
List<String> stringList = ... ; 

है तो

public class MyDataType { 
    private final int intValue ; 
    private final String stringValue ; 
    public MyDataType(int intValue, String stringValue) { 
     this.intValue = intValue ; 
     this.stringValue = stringValue ; 
    } 
    public int getIntValue() { 
     return intValue ; 
    } 
    public String getStringValue() { 
     return stringValue ; 
    } 
} 

अब आप

TableView<MyDataType> table = new TableView<>(); 
for (int i = 0; i < intList.size() && i < stringList.size(); i++) { 
    table.getItems().add(new MyDataType(intList.get(i), stringList.get(i))); 
} 

कर सकते हैं परिभाषित करने और हमेशा की तरह कॉलम परिभाषित करते हैं।

यदि आप वास्तव में किसी कारण से उस डेटा रूपांतरण को नहीं बना सकते हैं, तो आप तालिका के प्रकार को पूर्णांक के रूप में देख सकते हैं, प्रत्येक पंक्ति के लिए दो सूचियों में सूचकांक के मान के साथ। सूचियों के आकार तक 0, 1,... मानों के साथ तालिका को पॉप्युलेट करें। ऐसा लगता है:

import java.util.Arrays; 
import java.util.List; 

import javafx.application.Application; 
import javafx.beans.property.ReadOnlyIntegerWrapper; 
import javafx.beans.property.ReadOnlyStringWrapper; 
import javafx.scene.Scene; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class TableViewByColumns extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     List<Integer> intValues = Arrays.asList(1, 2, 3, 4, 5); 
     List<String> stringValues = Arrays.asList("One", "Two", "Three", "Four", "Five"); 

     TableView<Integer> table = new TableView<>(); 
     for (int i = 0; i < intValues.size() && i < stringValues.size(); i++) { 
      table.getItems().add(i); 
     } 

     TableColumn<Integer, Number> intColumn = new TableColumn<>("Value"); 
     intColumn.setCellValueFactory(cellData -> { 
      Integer rowIndex = cellData.getValue(); 
      return new ReadOnlyIntegerWrapper(intValues.get(rowIndex)); 
     }); 

     TableColumn<Integer, String> nameColumn = new TableColumn<>("Name"); 
     nameColumn.setCellValueFactory(cellData -> { 
      Integer rowIndex = cellData.getValue(); 
      return new ReadOnlyStringWrapper(stringValues.get(rowIndex)); 
     }); 

     table.getColumns().add(intColumn); 
     table.getColumns().add(nameColumn); 

     primaryStage.setScene(new Scene(new BorderPane(table), 600, 600)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

समस्या यह है कि सूची अलग-अलग आकार के हैं और मुझे कॉलम की पूरी सूची रखने की आवश्यकता है, इसलिए एक कॉलम दूसरे की तुलना में लंबा होगा। – tikend

+1

निश्चित रूप से आप उस मामले के लिए कोड संशोधित कर सकते हैं? मेरे पास अब एक बैठक है, लेकिन अगर यह वास्तव में आपके बाहर है तो मैं वापस आऊंगा जब मैं वापस आऊंगा ... –

+0

क्षमा करें, मेरा बुरा, जावा में लैम्ब्डा अभिव्यक्तियों में बहुत कुशल नहीं है, लेकिन इसे पहले से ही मिला है। मदद के लिए THX, समाधान के रूप में अपने उत्तर को चिह्नित करना। – tikend

0

मुझे एक जावाएफएक्स ट्यूटोरियल मिला जो कि उनके आधार पर संग्रह और पॉप्युलेटिंग कॉलम लेने के लिए समाधान के साथ-साथ तालिका को बाद में संग्रह के रूप में अपडेट किया गया है, एक ऑब्जर्जेबललिस्ट का उपयोग करके।

http://code.makery.ch/library/javafx-8-tutorial/part2/

उनकी कोड दो विशेषताओं के साथ वस्तुओं की एक सूची है, आप के बजाय अलग-अलग कॉलम के लिए अपने वस्तुओं की दो चर तक पहुँचने के अपने दो अलग-अलग सूचियों से आकर्षित करने के लिए अपने कोड को संशोधित करना चाहते हैं।

+0

क्या यह प्रश्न अभी बाकी नहीं है? –

+0

मुझे विश्वास नहीं है क्योंकि उन्होंने कहा था कि उन्हें केवल ऐसे समाधान मिले हैं जो स्तंभों के बजाय पंक्तियों में डेटा एकत्रित करते हैं। यह स्तंभों में इसे पॉप्युलेट करने का एक समाधान होगा। – dbillz

+0

आपका लिंक ऑब्जेक्ट्स की एक सूची के साथ मिले समाधान में वर्णित ओपी की स्थिति है, जिनमें से प्रत्येक पंक्ति का प्रतिनिधित्व करता है। आपका उत्तर सिर्फ "यहां मिले समाधान का एक उदाहरण है, इसे अपने उपयोग के मामले में संशोधित करें।", जो कि इस उपयोग के मामले में मैं इन प्रकार के समाधानों को कैसे संशोधित करूं? " –

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