簡體   English   中英

JavaFX TableView中的屬性綁定不起作用

[英]Property bindings in JavaFX TableView are not working

我跟蹤了許多鏈接,找到了一種在表格視圖中顯示復選框的解決方案。 但是我無法在表視圖中更改復選框的值。

我遵循的鏈接: 如何在JavaFX中將CheckBox添加到TableView

型號類別:

public class TUser {
    private SimpleStringProperty name;
    private SimpleStringProperty address;
    private SimpleBooleanProperty active;

public TUser(String name, String address, boolean active) {
    this.name = new SimpleStringProperty(name);
    this.address = new SimpleStringProperty(address);
    this.active = new SimpleBooleanProperty(active);
}

public String getName() {
    return name.get();
}

public void setName(String name) {
    this.name = new SimpleStringProperty(name);
}

public String getAddress() {
    return address.get();
}

public void setAddress(String address) {
    this.address = new SimpleStringProperty(address);
}

public boolean getActive() {
    return active.get();
}

public void setActive(boolean active) {
    this.active = new SimpleBooleanProperty(active);
}

}

FXML文件:

<TableView fx:id="usertable" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
  <columns>
      <TableColumn fx:id="name" prefWidth="142.0" text="Name" />
    <TableColumn fx:id="address" prefWidth="147.0" text="Address" />
      <TableColumn fx:id="active" prefWidth="153.0" text="Active" />
  </columns>
   <columnResizePolicy>
      <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
   </columnResizePolicy>
</TableView>

控制器類別:

public class UserManagement extends AnchorPane {

    @FXML
    private TableView<TUser> usertable;
    @FXML
    private TableColumn<TUser, String> address;
    @FXML
    private TableColumn<TUser, String> name;
    @FXML
    private TableColumn<TUser, Boolean> active;

    public UserManagement() throws IOException {
        initGraphics();
        initTable();
    }

    private class CheckBoxCellFactory<S, T> implements Callback<TableColumn<S, T>, TableCell<S, T>> {
    @Override public TableCell<S, T> call(TableColumn<S, T> p) {
        return new CheckBoxTableCell<>();
    }
}

    private void initGraphics() throws IOException {
        FXMLLoader content = new FXMLLoader(getClass().getResource("/mypack/fxmls/UserManagement.fxml"));
        content.setController(this);
        Node contentnode = (Node) content.load();
        AnchorPane.setBottomAnchor(contentnode, 0.0);
        AnchorPane.setLeftAnchor(contentnode, 0.0);
        AnchorPane.setRightAnchor(contentnode, 0.0);
        AnchorPane.setTopAnchor(contentnode, 0.0);
        getChildren().add(contentnode);

        active.setCellFactory(new CheckBoxCellFactory<TUser, Boolean>());

        address.setCellValueFactory(new PropertyValueFactory<TUser, String>("address"));
        name.setCellValueFactory(new PropertyValueFactory<TUser, String>("name"));
        active.setCellValueFactory(new PropertyValueFactory<TUser, Boolean>("active"));

    }

    private void initTable(){
        ObservableList<TUser> data = FXCollections.observableArrayList(new TUser("ABC", "ABC Road", true));
        usertable.setItems(data);
    }

}

輸出:

表格檢視

為了使復選框正確綁定到模型類中的屬性,您需要定義一個屬性訪問器方法:

public class TUser {

    // other methods and fields as before....

    public BooleanProperty activeProperty() {
        return active ;
    }

}

同樣,為您的其他屬性定義類似方法也是一個好主意。

請注意,您的表格不可編輯,因此用戶無法操作復選框。 如果希望它們可編輯,則使TableView可編輯:

<TableView fx:id="usertable" editable="true" ...>

TableColumn默認情況下是可編輯的。

暫無
暫無

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

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