[java] TableView 행 모양 업데이트



Answers

취소 선을 .text 클래스로 설정해야합니다. ;-)

.itemCancelado {
    -fx-text-fill: red;
}
.itemCancelado .text {
    -fx-strikethrough: true;
}
Question

몇 가지 TableView 행의 모양을 변경하는 데 어려움을 겪고 있습니다. 선에는 획이 빨간색으로 표시되어야합니다. 사실, 나는 그것을 붉은 색으로 보여줄 수는 있지만 여전히 뇌졸중을 할 수는 없다. 이것은 라인의 모양을 변경하는 데 사용하는 CSS 클래스입니다.

.itemCancelado {
    -fx-strikethrough: true;
    -fx-text-fill: red;
}

이 스타일 클래스는 사용자가 항목을 취소 된 것으로 표시 할 때 추가됩니다.

public class ItemCanceladoCellFactory implements Callback<TableColumn, TableCell> {
    @Override
    public TableCell call(TableColumn tableColumn) {
        return new TableCell<ItemBean, Object>() {
            @Override
            public void updateItem(Object item, boolean empty) {
                super.updateItem(item, empty);
                setText(empty ? "" : getItem().toString());
                setGraphic(null);
                int indice=getIndex();
                ItemBean bean=null;
                if(indice<getTableView().getItems().size())
                    bean = getTableView().getItems().get(indice);
                if (bean != null && bean.isCancelado())
                    getStyleClass().add("itemCancelado");
            }
        };
    }
}

여기서 또 다른 문제가 있습니다. 취소 된 것으로 표시된 행은 사용자가 관찰 가능 목록에서 요소를 추가하거나 제거 할 때 색만 변경됩니다. TableView를 강제로 업데이트 할 수있는 방법이 있습니까?

편집 된 정보

ItemBean 클래스를 BooleanProperty를 사용하도록 변경하고 부분적으로 해결했습니다.

public class ItemBean {
    ...
    private BooleanProperty cancelado = new SimpleBooleanProperty(false);
    ...
    public Boolean getCancelado() {
        return cancelado.get();
    }

    public void setCancelado(Boolean cancelado){
        this.cancelado.set(cancelado);
    }

    public BooleanProperty canceladoProperty(){
        return cancelado;
    }
}

불행히도, "cancelado"(이 작업이 끝나면 숨겨 지거나 제거 될 것입니다) 열만 모양이 바뀝니다.

여기 열과 테이블을 구성합니다.

public class ControladorPainelPreVenda extends ControladorPainel {

    @FXML
    private TableView<ItemBean> tabelaItens;
    private ObservableList<ItemBean> itens = FXCollections.observableArrayList();
    ...

    private void configurarTabela() {
        colunaCodigo.setCellValueFactory(new MultiPropertyValueFactory<ItemBean, String>("produto.id"));
        colunaCodigo.setCellFactory(new ItemCanceladoCellFactory());
        colunaDescricao.setCellValueFactory(new MultiPropertyValueFactory<ItemBean, String>("produto.descricao"));
        colunaDescricao.setCellFactory(new ItemCanceladoCellFactory());
        colunaLinha.setCellValueFactory(new MultiPropertyValueFactory<ItemBean, String>("produto.nomeLinha"));
        colunaLinha.setCellFactory(new ItemCanceladoCellFactory());
        colunaQuantidade.setCellValueFactory(new PropertyValueFactory<ItemBean, BigDecimal>("quantidade"));
        colunaQuantidade.setCellFactory(new ItemCanceladoCellFactory());
        colunaValorLiquido.setCellValueFactory(new PropertyValueFactory<ItemBean, BigDecimal>("valorLiquido"));
        colunaValorLiquido.setCellFactory(new ItemCanceladoCellFactory());
        colunaValorTotal.setCellValueFactory(new PropertyValueFactory<ItemBean, BigDecimal>("valorTotal"));
        colunaValorTotal.setCellFactory(new ItemCanceladoCellFactory());
        colunaCancelado.setCellValueFactory(new PropertyValueFactory<ItemBean, Boolean>("cancelado"));
        colunaCancelado.setCellFactory(new ItemCanceladoCellFactory());
        tabelaItens.setItems(itens);
    }
    ...
}

모든 열을 어떻게 업데이트 할 수 있습니까?




Links