java fx 重绘_JavaFX 2.2:如何强制重绘/更新ListView

我在JavaFX 2模式对话窗口中有一个ListView控件。JavaFX 2.2:如何强制重绘/更新ListView

此ListView显示DXAlias实例,它由单元工厂生产的ListCells。工厂对象所做的主要事情是检查ListView的UserData属性数据,并将其与ListCell对应的项目进行比较。如果它们相同,则ListCell的内容呈现为红色,否则呈现为黑色。我这样做是为了表明ListView中的哪些项目当前被选作“默认”。这里是我的ListCell工厂类,所以你可以明白我的意思:

private class AliasListCellFactory implements

Callback, ListCell> {

@Override

public ListCell call(ListView p) {

return new ListCell() {

@Override

protected void updateItem(DXSynonym item, boolean empty) {

super.updateItem(item, empty);

if (item != null) {

DXSynonym dx = (DXSynonym) lsvAlias.getUserData();

if (dx != null && dx == item) {

this.setStyle("-fx-text-fill: crimson;");

} else { this.setStyle("-fx-text-fill: black;"); }

this.setText(item.getDxName());

} else { this.setText(Census.FORMAT_TEXT_NULL); }

}};

}

我有一个名为“handleAliasDefault()”的按钮处理程序,其通过取所选择的DXAlias实例,使得所选择的项目在ListView新的默认将其存储到ListView:lsvAlias.setUserData(选定的DXAlias)中。下面是处理代码:

// Handler for Button[fx:id="btnAliasDefault"] onAction

@FXML

void handleAliasDefault(ActionEvent event) {

int sel = lsvAlias.getSelectionModel().getSelectedIndex();

if (sel >= 0 && sel < lsvAlias.getItems().size()) {

lsvAlias.setUserData(lsvAlias.getItems().get(sel));

}

}

因为这是在响应作出点击设为默认值按钮的变化是改变ListView的的UserData()没有任何变化为后盾ObservableList,他们的名单不正确指示新的默认值。

有没有办法强制ListView重新呈现其ListCells? Android用户在这个问题上有四十亿个问题,但JavaFX似乎并没有幸福。我可能不得不对后备阵列进行“无意义的改变”来强制重绘。

2013-06-02

scottb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值