2012-06-24 23 views
17

मैं चाहूँगा पता है कि कैसे मैं डेटा के साथ एक tableview पॉप्युलेट है ... सभी उदाहरण मैंने देखा है कॉलम के साथ एक tableview बनाता है और सबकुछ और इसे दृश्य में जोड़ें। सभी जावा कोड में ही किया। अगर मैं अपने "फार्म" JavaFX दृश्य बिल्डर में डिजाइन:एक tableview है कि JavaFX दृश्य बिल्डर में डिज़ाइन किया गया है एक fxml फ़ाइल में परिभाषित किया गया है पॉप्युलेट करने के लिए कैसे

क्या मैं जानना चाहता हूँ। उनके सभी टेबल और कॉलम को परिभाषित करना। जावा से इसे पॉप्युलेट करने के लिए मैं इसे कैसे एक्सेस करूं? या अगर कोई मुझे इस पर उचित ट्यूटोरियल पर इंगित कर सकता है। 3 कॉलम

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="288.0" prefWidth="293.0" xmlns:fx="http://javafx.com/fxml"> 
<children> 
    <TableView fx:id="tableView" layoutX="35.0" layoutY="28.0" prefHeight="200.0" prefWidth="227.0"> 
    <columns> 
     <TableColumn prefWidth="75.0" text="UserId" fx:id="UserId" /> 
     <TableColumn prefWidth="75.0" text="UserName" fx:id="UserName" /> 
     <TableColumn prefWidth="75.0" text="Active" fx:id="Active" /> 
    </columns> 
    </TableView> 
</children> 
</AnchorPane> 

मैं अपने जावा कोड में एक ResultSet में अपने डेटा के साथ केवल एक tableview -

मैं JavaFX दृश्य बिल्डर में मेरी फार्म को परिभाषित किया है।

ResultSet rs = c.createStatement().executeQuery(SQL); 

मुझे टेबल व्यू को पॉप्युलेट करने की आवश्यकता है।

धन्यवाद

उत्तर

35

tableview करने के लिए उपयोग करने के लिए आप अपने FXML पेज के एक नियंत्रक को परिभाषित करने की जरूरत है।

fx:controller="path.to.MyController" 

FXML फ़ाइल में AnchorPane पर विशेषताएँ जोड़ें। तब नियंत्रक बना सकते हैं और इनके सामने @FXML एनोटेशन डालकर FXML फ़ाइल से tableview, TableColumns लिंक:

package path.to; 

public class MyController implements Initializable { 

    @FXML private TableView<User> tableView; 
    @FXML private TableColumn<User, String> UserId; 
    @FXML private TableColumn<User, String> UserName; 
    @FXML private TableColumn<User, String> Active; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     UserId.setCellValueFactory(new PropertyValueFactory<User, String>("id")); 
     UserName.setCellValueFactory(new PropertyValueFactory<User, String>("name")); 
     Active.setCellValueFactory(new PropertyValueFactory<User, String>("active")); 

     tableView.getItems().setAll(parseUserList()); 
    } 
    private List<User> parseUserList(){ 
     // parse and construct User datamodel list by looping your ResultSet rs 
     // and return the list 
    } 
} 

tableview initialize विधि में भर जाता है। ध्यान दें कि नियंत्रक में हम नए टेबलव्यू या टेबल कॉलम नहीं बना रहे हैं, क्योंकि वे पहले से ही बनाए गए हैं FXML फ़ाइल को लोड किया जा रहा है। यह भी ध्यान रखें कि tableview और Tablecolumn चर नाम इसी FXML फ़ाइल में fx:id मूल्यों के साथ ही होना चाहिए। इसलिए जब प्रयोक्ता-आईडी, उपयोगकर्ता नाम और सक्रिय नाम सुविधाजनक namings नहीं हैं, उन्हें FXML फ़ाइल में और नियंत्रक में userIdCol, userNameCol और userActiveCol क्रमशः जैसे नामों के लिए दोनों बदल जाते हैं।

+0

धन्यवाद फ्लॉप नियंत्रकों :) – Chrispie

+2

वर्ग उपयोगकर्ता में क्या होना चाहिए के बारे में पता था? – Chiranjib

+3

इस उत्तर के लिए धन्यवाद। हालांकि एक त्वरित नोट: प्रारंभिक इंटरफ़ेस अब आवश्यक नहीं है। आपको इसे लागू करने की ज़रूरत नहीं है। '@FXML निजी शून्य इनिशियलाइज़()' और यह FXMLLoader द्वारा बुलाया जाएगा: बस अपने नियंत्रक में एक विधि है। [डॉक्स में सबूत] (http://download.java.net/jdk8/jfxdocs/javafx/fxml/Initializable.html) – alisianoi

0

यो अपने नियंत्रक में ऐसा कर सकते हैं:

@FXML 
private TableView<User> table; 
private List<User> users; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // Set the columns width auto size 
    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
    table.getColumns().get(0).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for id column size 
    table.getColumns().get(1).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for dt column size 
    table.getColumns().get(2).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for cv column size 
    table.getItems().setAll(this.users); 
}