簡體   English   中英

TableView javafx中字符串和屬性String之間的區別

[英]difference between string and property String in tableview javafx

tableview javafx中的string和Property String有什么區別? 如果我將數據類型用作字符串或屬性字符串,它將如何更改tableview? 任何人都可以舉例說明這種差異

屬性字符串在Java中是不同的。 基本上,當您要在TableView中觀察變量時,可以將屬性設置為String。 Java之所以這樣做是因為Java使用了MVC模式(模型-視圖-控制器)。 模型是您存儲的數據,視圖是您所看到的,就像GUI,控制器是您應用程序中所有內容的大腦和邏輯。 Java中的Model是作為包含屬性而不是僅包含字段的類完成的。 因為當您要將數據存儲到JavaFX中的TableView中時,正確的方法是從一個類實例化對象,並且該類中定義的Properties成為該對象的屬性,因此您可以將該對象存儲在TableView中並放入一些邏輯為了使tableView能夠找到此對象的屬性並將其填充在表中,如果它們是String而不是屬性,則JavaFX將無法獲取它們並使它們在表中可觀察。 我在下面編寫了一些邏輯,以使您了解如何完成此操作。 首先,這是一個充當模型的類:

public class Contact extends SQL_Objects {

    private SimpleStringProperty id;
    private SimpleStringProperty firstName;
    private SimpleStringProperty lastName;
    private SimpleStringProperty phone;
    private SimpleStringProperty email;
    private SimpleStringProperty unitNo;
    private SimpleStringProperty street;
    private SimpleStringProperty city;
    private SimpleStringProperty province;
    private SimpleStringProperty zipCode;
    private SimpleStringProperty country;
    private SimpleStringProperty gender;
    private SimpleStringProperty notes;

    private SimpleStringProperty relationship;

    private final static String[] FIELD_NAMES = { "id", "firstName", "lastName", "phone", "email", "unitNo", "street", "city", "province", "zipCode", "country", "gender", "notes", "relationship" };

    public Contact(String id, String firstName, String lastName, String phone, String email, String unitNo, String street, String city, String province, String zipCode, String country, String gender, String notes, String relationship) {
        this.id = new SimpleStringProperty(id);
        this.firstName = new SimpleStringProperty(firstName);
        this.lastName = new SimpleStringProperty(lastName);
        this.phone = new SimpleStringProperty(phone);
        this.email = new SimpleStringProperty(email);
        this.unitNo = new SimpleStringProperty(street);
        this.street = new SimpleStringProperty(street);
        this.city = new SimpleStringProperty(city);
        this.province = new SimpleStringProperty(province);
        this.zipCode = new SimpleStringProperty(zipCode);
        this.country = new SimpleStringProperty(country);
        this.gender = new SimpleStringProperty(gender);
        this.notes = new SimpleStringProperty(notes);
        this.relationship = new SimpleStringProperty(relationship);
    }

    public String getId() {
        return id.get();
    }

    public String getFirstName() {
        return firstName.get();
    }

    public String getLastName() {
        return lastName.get();
    }

    public String getPhone() {
        return phone.get();
    }

    public String getEmail() {
        return email.get();
    }

    public String getUnitNo() {
        return unitNo.get();
    }

    public String getStreet() {
        return street.get();
    }

    public String getCity() {
        return city.get();
    }

    public String getProvince() {
        return province.get();
    }

    public String getZipCode() {
        return zipCode.get();
    }

    public String getCountry() {
        return country.get();
    }

    public String getGender() {
        return gender.get();
    }

    public String getNotes() {
        return notes.get();
    }

    public String getRelationship() {
        return relationship.get();
    }

    public static String[] getFieldNames() {
        return FIELD_NAMES;
    }

這些吸氣劑和吸氣劑應遵循Java中的命名約定標准,以便在將對象插入表中時,如我將在下面顯示的那樣,該表將使用字段名稱並為每個字段獲取吸氣劑以獲取其值,使它在表格中可見,因此以下是填充表的列和行的控制器示例:

private void fillColumns() {
    try { // starting from 2 so that the id column is not included
        for (int i = 2; i <= resultSet.getMetaData().getColumnCount(); i++ ) {
            TableColumn column = new TableColumn(resultSet.getMetaData().getColumnName(i));
            column.setCellValueFactory(new PropertyValueFactory<Contact, String>(Contact.getFieldNames()[i - 1]));
            selectedTable.getColumns().add(column);              
        }
    } catch (SQLException ex) {
        Alert alert = new Alert(Alert.AlertType.ERROR, "Type:\n" + ex.getClass().getName() + "\n\nMessage: Unable to get the columns from the database\n\nDetails:\n" + ex.getMessage(), ButtonType.OK);
    }    
}

接下來是填充行,假設我從數據庫中選擇了數據並將它們存儲在結果集中,我將使用next方法逐行遍歷resultSet的記錄,如果沒有則該方法將返回false更多行

private void fillRows() {
    shownRecords = 0;
    try {
        while(resultSet.next()) {
            Contact cont = new Contact(Integer.toString(resultSet.getInt(1)), resultSet.getString(2), resultSet.getString(3), resultSet.getString(4), resultSet.getString(5), resultSet.getString(6), resultSet.getString(7), resultSet.getString(8), resultSet.getString(9), resultSet.getString(10), resultSet.getString(11), resultSet.getString(12), resultSet.getString(13), resultSet.getString(14));
            tableView.getItems().add(cont);
        }
        resultSet.beforeFirst();
    } catch (SQLException ex) {
        Alert alert = new Alert(Alert.AlertType.ERROR, "Type:\n" + ex.getClass().getName() + "\n\nMessage: Unable to get the records from the database\n\nDetails:\n" + ex.getMessage(), ButtonType.OK);
        alert.show();
    }
}

如您所見,我使用SimpleStringProperty而不是Strings,如果您在這里使用Strings,JavaFx將無法顯示結果,因為它們以某種方式不被視為插入表中的對象的屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM