2015-01-08 3 views
1

Я следил за многими ссылками и обнаружил, что разрешение на показ отображается в виде таблицы. Но я не могу изменить значение флажка в виде таблицы.Вложения свойств в JavaFX TableView не работают

Ссылка Я последовал: How to add CheckBox's to a TableView in JavaFX

Модель Класс:

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 File:

<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> 

Controller Класс:

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); 
    } 

} 

Выход:

TableView

ответ

1

Для того, чтобы флажок правильно привязать к свойству в классе модели, необходимо определить метод доступа к свойствам:

public class TUser { 

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

    public BooleanProperty activeProperty() { 
     return active ; 
    } 

} 

Это, вероятно, хорошая идея, чтобы определить аналогичные методы для ваших других свойств тоже.

Обратите внимание, что таблица не редактируется, поэтому флажки не могут быть обработаны пользователем. Если вы хотите, чтобы они были доступны для редактирования, а затем сделать TableView редактируемые:

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

В TableColumn s редактируются по умолчанию.

+0

Но я не хочу, чтобы это редактировалось. Я хочу только показать данные, чтобы пользователь не мог его редактировать. –

+0

А, ок. («Я не могу изменить значение флажка», я понял, что вы хотите, чтобы пользователь мог их изменить. Моя ошибка.) Просто определите метод доступа к свойствам, и он будет правильно привязан к свойству. –

+0

Обновленный ответ соответственно. –

Смежные вопросы