कैसे कर सकते हैं मैं एक श्रोता जोड़ने के लिए प्रत्येक ListCell में बनाई गई मेरी सूची दृश्य करने के लिए 1. मिलता है कि सेल में डेटा और 2. एक विधि कॉल?

0

सवाल

मैं पैदा कर रहा हूँ एक mockup के एक जावा संस्करण के घर में डेटाबेस के लिए मेरी कंपनी है । मैं सफलतापूर्वक प्रदर्शन सभी प्रविष्टियों (इस मामले में ग्राहकों के लिए) में सूची देखने के लिए, लेकिन मैं चाहता हूँ करने के लिए सक्षम होना करने के लिए एक विधि कॉल और प्राप्त डेटा से सेल. उदाहरण के लिए, अगर मैं क्लिक किया है एक ग्राहक के साथ एक ग्राहक आईडी के 498, मैं चाहता हूँ करने के लिए कुछ तरीके का उपयोग करने के लिए आईडी(498) और फिर प्रदर्शन में अधिक जानकारी के लिए कि ग्राहक ID. मैं संभाल कर सकते हैं प्रदर्शित सभी जानकारी अपने आप को, मैं कर रहा हूँ बस के साथ संघर्ष करने के लिए कैसे डेटा का उपयोग कोशिकाओं के अंदर. प्रासंगिक कोड:

नियंत्रक वर्ग का टुकड़ा है कि भरता सूची देखें:

package com.verus.techtracker_2;

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.util.Callback;

import java.net.URL;
import java.sql.*;
import java.util.ArrayList;
import java.util.ResourceBundle;

public class MainViewController {
ObservableList<ObservableList> data = 
FXCollections.observableArrayList();
@FXML
private Label welcomeText;
@FXML
private ListView<ObservableList> OrgTbl2;
private orgmodel org;
@FXML
private static Connection conn;
private static final String url = "jdbc:sqlserver://10.9.32.46:1433;database=TechTracker;integratedSecurity=true";

public MainViewController() {
}

public static Connection connect() throws SQLException {
    try{
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    }catch(ClassNotFoundException cnfe){
        System.err.println("Error: "+cnfe.getMessage());
    }catch(InstantiationException ie){
        System.err.println("Error: "+ie.getMessage());
    }catch(IllegalAccessException iae){
        System.err.println("Error: "+iae.getMessage());
    }

    conn = DriverManager.getConnection(url);
    return conn;
}

public static Connection getConnection() throws SQLException, ClassNotFoundException{
    if(conn !=null && !conn.isClosed())
        return conn;
    connect();
    return conn;


}

public void initialize (URL url, ResourceBundle resourceBundle) throws SQLException, ClassNotFoundException {
    loadData();
}
ResultSet rs = null;
public void loadData() throws SQLException, ClassNotFoundException {
    getConnection();


    ObservableList<orgmodel> OrganizationObservableList = FXCollections.observableArrayList();

    try{
        PreparedStatement ps = connect().prepareStatement("SELECT CustomerName,CustomerID, Inactive FROM dbo.tbCustomers");
        rs=ps.executeQuery();
        System.out.println(rs);


        /**
         * ******************************
         * Data added to ObservableList *
         *******************************
         */
        while (rs.next()) {
            //Iterate Row
            ObservableList<String> row = FXCollections.observableArrayList();
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                //Iterate Column
                row.add(rs.getString(i));
            }
            System.out.println("Row [1] added " + row);
            data.add(row);
            org = new orgmodel(rs.getString(1), rs.getString(2), rs.getBoolean(3));
            OrganizationObservableList.add(org);


        }

        //FINALLY ADDED TO TableView
        OrgTbl2.setItems(data);
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Error on Building Data");
    }
}


}

FXML फ़ाइल का यह दृश्य है:

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

<?import javafx.scene.control.ListView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="1000.0" prefWidth="1920.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.verus.techtracker_2.MainViewController">
   <children>
      <VBox layoutX="130.0" layoutY="58.0" prefHeight="200.0" prefWidth="100.0" />
      <ListView fx:id="OrgTbl2" layoutX="7.0" layoutY="6.0" onMouseClicked="#loadData" prefHeight="987.0" prefWidth="958.0" />
   </children>
</AnchorPane>

java javafx
2021-11-22 19:53:02
1

सबसे अच्छा जवाब

2

मुझे लगता है कि जब आप कहते हैं

उदाहरण के लिए, अगर मैं क्लिक किया है एक ग्राहक के साथ एक ग्राहक आईडी के 498,

आप कर रहे हैं की चर्चा करते हुए प्रत्युत्तर देना करने के लिए अगर उपयोगकर्ता का चयन करता है में एक आइटम ListView. तुम सब करने की ज़रूरत है रजिस्टर एक श्रोता चयन के साथ, का उपयोग कर

orgTbl2.getSelectionModel().selectedItemProperty().addListener(...)

यह बहुत आसान हो जाएगा अगर आप अपने ListView प्रदर्शन मॉडल उदाहरणों, उपयोग करने के बजाय एक List का प्रतिनिधित्व करने के लिए प्रत्येक पंक्ति. आप पहले से ही प्रकट करने के लिए एक मॉडल वर्ग कहा जाता है OrgModel परिभाषित किया गया है ।

यहाँ का एक संस्करण है, अपने कोड है, जो इस करता है । मैं सभी को हटाया अनावश्यक कोड, वापस करने के लिए मानक नामकरण सम्मेलनों, और कुछ अन्य "क्लीन-अप" इतना है कि अन्य उपयोगकर्ताओं को पढ़ सकते हैं, आसानी से कोड.

package com.verus.techtracker_2;

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.util.Callback;

import java.net.URL;
import java.sql.*;
import java.util.ArrayList;
import java.util.ResourceBundle;

public class MainViewController {

    @FXML
    private Label welcomeText;
    @FXML
    private ListView<OrgModel> orgTbl2;

    private static Connection conn ;
    private static final String url = "jdbc:sqlserver://10.9.32.46:1433;database=TechTracker;integratedSecurity=true";
    
    public void initialize (URL url, ResourceBundle resourceBundle) throws SQLException, ClassNotFoundException {
        loadData();

        orgTbl2.getSelectionModel()
            .selectedItemProperty()
            .addListener((obs, oldSelection, newSelection) -> {

            if (newSelection != null) {
                // assuming names of property accessor methods:
                String customerName = newSelection.getCustomerName();
                String id = newSelection.getId();
                boolean inactive = newSelection.isInactive();
                // do whatever you need with the data:
                System.out.println("Selected customer id: " + id);
        });

        // display customer name in listview:
        orgTbl2.setCellFactory(lv -> new ListCell<>() {
            @Override
            protected void updateItem(OrgModel item, boolean empty) {
                super.updateItem(item, empty);
                if (empty || item == null) {
                    setText("");
                } else {
                    setText(item.getCustomerName());
                }
            }
        });
    }

    public void loadData() throws SQLException, ClassNotFoundException {
    
        ObservableList<OrgModel> organizationObservableList = FXCollections.observableArrayList();
    
        try{
            PreparedStatement ps = connect().prepareStatement("SELECT CustomerName,CustomerID, Inactive FROM dbo.tbCustomers");
            ResultSet rs=ps.executeQuery();
            System.out.println(rs);

            while (rs.next()) {
                OrgModel org = new OrgModel(rs.getString(1), rs.getString(2), rs.getBoolean(3));
                organizationObservableList.add(organizationObservableList);
            }
            orgTbl2.setItems(data);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Error on Building Data");
        }
    }

    private static Connection connect() throws SQLException {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        }catch(ClassNotFoundException cnfe){
            System.err.println("Error: "+cnfe.getMessage());
        }catch(InstantiationException ie){
            System.err.println("Error: "+ie.getMessage());
        }catch(IllegalAccessException iae){
            System.err.println("Error: "+iae.getMessage());
        }
    
        conn = DriverManager.getConnection(url);
        return conn;
    }
    
    public static Connection getConnection() throws SQLException, ClassNotFoundException{
        if(conn !=null && !conn.isClosed())
            return conn;
        conn = connect();
        return conn;
    }    

}

अगर तुम सच में चाहते हैं करने के लिए विशेष रूप से प्रतिक्रिया करने के लिए माउस क्लिक करता है, बजाय का चयन परिवर्तन, आप कर सकते हैं तो सेल में. नोट: यह मतलब है, उदाहरण के लिए, यदि उपयोगकर्ता परिवर्तन चयन कीबोर्ड का उपयोग कर वहाँ हो जाएगा तो कोई इस के जवाब में परिवर्तन. यह उपयोगी हो सकता है हालांकि, अगर आप केवल करने के लिए प्रतिक्रिया करने के लिए डबल-क्लिक पर एक सेल, आदि ।

public void initialize (URL url, ResourceBundle resourceBundle) throws SQLException, ClassNotFoundException {
    loadData();

    // display customer name in listview:
    orgTbl2.setCellFactory(lv -> new ListCell<>() {

        {
            setOnMouseClicked(event -> {
                OrgModel item = getItem();
                if (item != null) {
                    String id = item.getId();
                    String customerName = item.getCustomerName();
                    boolean inactive = item.isInactive();
                    // etc ...
                }
            });
        }

        @Override
        protected void updateItem(OrgModel item, boolean empty) {
            super.updateItem(item, empty);
            if (empty || item == null) {
                setText("");
            } else {
                setText(item.getCustomerName());
            }
        }
    });
}
2021-11-22 20:49:18

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में