我试图通过尝试显示彩色矩形而不是字符串本身来自定义 Javafx 中的 ListView。
public class Main extends Application {
@Override
public void start(Stage primaryStage)
{
VBox vBox = new VBox();
ListView<String> listView = new ListView<>();
vBox.getChildren().add(listView);
ObservableList<String> list = FXCollections.observableArrayList("black" , "blue" , "brown" , "gold");
listView.setItems(list);
listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
@Override
public ListCell<String> call(ListView<String> stringListView) {
return new cell();
}
});
primaryStage.setScene(new Scene(vBox,400 , 400));
primaryStage.show();
}
public class cell extends ListCell<String>
{
Rectangle rect;
cell() {
super();
this.rect = new Rectangle(20,20);
this.rect.setFill(Color.web(getItem())); // ERROR ERROR ERROR
setGraphic(this.rect);
}
@Override
protected void updateItem(String s, boolean empty) {
super.updateItem(s, empty);
if(empty)
setGraphic(null);
else
setGraphic(this.rect);
}
}
public static void main(String[] args) {
launch(args);
}
}
显然,错误出现在我指示为 ERROR 的行中。我稍微操纵了细胞类,它起作用了。下面是被操纵的细胞类:
public class cell extends ListCell<String>
{
Rectangle rect;
cell() {
super();
this.rect = new Rectangle(20,20);
// this.rect.setFill(Color.web(getItem()));
setGraphic(this.rect);
}
@Override
protected void updateItem(String s, boolean empty) {
super.updateItem(s, empty);
if(empty)
setGraphic(null);
else {
rect.setFill(Color.web(getItem()));
setGraphic(this.rect);
}
}
我知道 updateItem() 会被调用很多次。我的第一个方法确实减少了 updateItem() 完成的工作,但由于某种原因它在该行中抛出错误。以前的方法出错的原因可能是什么
暮色呼如
相关分类