一部のTableView行の外観を変更するのにはいくつかの困難があります。行にはストロークのテキストが赤で表示されます。実際には、私は赤色で表示することができますが、まだストロークを行うことはできません。これは私がラインの外観を変更するために使用しているCSSクラスです:TableViewの行の外観を更新する
.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の更新を強制することができる方法はありますか?
編集した情報
私はBooleanPropertyを使用するItemBeanクラスを変更し、それが部分的に解決:残念ながら
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);
}
...
}
すべての列を更新するにはどうすればよいですか?
あなたの言ったことはしましたが、TableViewはまだ更新されません。 – brevleq
あなたの質問の追加情報のように 'cancelado'プロパティ' canceladoProperty() 'を取得するメソッドの名前を' getCancelado() 'ではなく私の例のように指定する必要があります。 – jewelsea
編集した質問で分かるように、部分的に解決されました:) – brevleq