为什么我在使用TableView和JavaFX时只获得一列?

时间:2017-09-09 17:43:09

标签: java javafx

我尝试使用三列创建一个简单的TableView。我正在使用Netbeans和Secene Builder。 fx:id以正确的方式设置。但我仍然只得到第一列。为什么我没有收到电话和邮件栏?我错过了什么吗?

Picture of the result

CONTROLLER CLASS

public class adressbuchViewController implements Initializable {

private Kontakt[] kontakte;

private ObservableList<Kontakt> data;

@FXML
private TableView<Kontakt> table;

@FXML
private TableColumn<Kontakt, String> name;

@FXML
private TableColumn<Kontakt, String> phone;

@FXML
private TableColumn<Kontakt, String> mail;

Kontakt k;

@Override
public void initialize(URL url, ResourceBundle rb) {

    data = FXCollections.observableArrayList();
    clearTable();
    initTable();

}

private void initTable() {

    name.setCellValueFactory(new PropertyValueFactory<>("name"));
    phone.setCellValueFactory(new PropertyValueFactory<>("phone"));
    mail.setCellValueFactory(new PropertyValueFactory<>("mail"));

    k = new Kontakt("david", "08459 100000", "david@gmx.de");
    data.add(k);
    k = new Kontakt("michael", "08459 200000", "michael@gmx.de");
    data.add(k);

    ...

    table.setItems(data);

}

    private void clearTable() {
    table.getItems().clear();
    }
}

KONTAKT CLASS  (我的教授有一些意见;))

public class Kontakt implements Comparable<Kontakt> {

private String name;
private String telefon;
private String email;

/**
 * Lege Kontaktdaten an. Bei allen Angaben werden umgebende Leerzeichen
 * entfernt. Entweder der Name oder die Telefonnummer darf nicht leer sein.
 *
 * @param name der Name.
 * @param telefon die Telefonnummer.
 * @param email die Email-Adresse.
 */
public Kontakt(String name, String telefon, String email) {
    // Leere Strings verwenden, wenn einer der Parameter null ist.
    if (name == null) {
        name = "";
    }
    if (telefon == null) {
        telefon = "";
    }
    if (email == null) {
        email = "";
    }
    this.name = name.trim();
    this.telefon = telefon.trim();
    this.email = email.trim();
    if(this.name.equals("") && this.telefon.equals("")) 
        throw new IllegalStateException("Name und Telefonnummer dürfen nicht beide leer sein.");
}

String gibKontaktString() {
    return name + ":" + telefon + ":" + email;
}

/**
 * @return den Namen.
 */
public String getName() {
    return name;
}

public void setName(String neu) {
if(telefon.equals("") && neu.trim().equals("")) throw new IllegalStateException("Name und Telefonnummer dürfen nicht beide leer sein.");

    this.name = neu.trim();
}

/**
 * @return die Telefonnummer.
 */
public String getTelefon() {
    return telefon;
}

public void setTelefon(String neu) {
if(name.equals("") && neu.trim().equals("")) throw new IllegalStateException("Name und Telefonnummer dürfen nicht beide leer sein.");
    this.telefon = neu.trim();
}

/**
 * @return die Adresse.
 */
public String getEmail() {
    return email;
}

public void setEmail(String neu) {
    this.email = neu;
}

/**
 * Teste dieses und jenes Objekt auf Datengleichheit.
 *
 * @param jenes Das Objekt, das mit diesem verglichen werden soll.
 * @return true wenn das Parameterobjekt ein Kontakt ist und sich die
 * Datenfelder paarweise gleichen.
 */
public boolean equals(Object jenes) {
    if (this == jenes) {
        return true;
    }
    if (jenes == null) {
        return false;
    }
    if (!(jenes instanceof Kontakt)) {
        return false;
    }
    Kontakt jenerKontakt = (Kontakt) jenes;
    return compareTo(jenerKontakt) == 0;
}

/**
 * @return einen mehrzeiligen String mit Name, Telefon und Email.
 */
public String toString() {
    //return name + "\n" + telefon + "\n" + email;
    return name + " -- " + telefon + " -- " +email;
}

/**
 * Vergleiche diesen Kontakt mit einem anderen, damit sortiert werden kann.
 * Kontakte werden nach Name, Telefonnummer und Adresse sortiert.
 *
 * @param jenerKontakt der Kontakt, mit dem verglichen werden soll.
 * @return einen negativen Wert, wenn dieser Kontakt vor dem Parameter
 * liegt, Null, wenn sie gleich sind, und einen positiven Wert, wenn dieser
 * Kontakt nach dem Parameter folgt.
 */
public int compareTo(Kontakt jenerKontakt) {
    int vergleich = name.compareTo(jenerKontakt.getName());
    if (vergleich == 0) {
        vergleich = telefon.compareTo(jenerKontakt.getTelefon());
    }
    if (vergleich == 0) {
        vergleich = email.compareTo(jenerKontakt.getEmail());
    }
    return vergleich;
}

/**
 * Berechne einen Hashcode nach den Regeln des Buches "Effektiv Java
 * programmieren" von Joshua Bloch.
 *
 * @return einen Hashcode fuer diesen Kontakt.
 */
public int hashCode() {
    int code = 17;
    code = 37 * code + name.hashCode();
    code = 37 * code + telefon.hashCode();
    code = 37 * code + email.hashCode();
    return code;
}

}

0 个答案:

没有答案