1
在下面的測試中,所選列表項應與綠色標記一起出現。它適用於最初選擇的項目。但是,看起來像#updateItem()在另一個項目被選中時不會被調用,這似乎是標記未被正確更新的原因。JavaFX:渲染選定的組合框列表項
public class ComboBoxCellFactoryTest extends Application
{
public static void main(String[] args)
{
Application.launch(args);
}
@Override
public void start(Stage stage)
{
Parent content = createContent();
Scene scene = new Scene(content, 400, 300);
stage.setScene(scene);
stage.show();
}
public Parent createContent()
{
FlowPane content = new FlowPane(10, 10);
ComboBox<String> combo = new ComboBox<String>();
combo.setItems(FXCollections.observableArrayList("Item 1", "Item 2", "Item 3", "Item 4"));
combo.getSelectionModel().selectLast();
combo.setCellFactory(new Callback<ListView<String>, ListCell<String>>()
{
@Override
public ListCell<String> call(ListView<String> p)
{
return new ListCell<String>()
{
private final Rectangle rectangle;
{
rectangle = new Rectangle(10, 10);
}
@Override
protected void updateItem(String item, boolean empty)
{
super.updateItem(item, empty);
if (empty || item == null)
{
setText(null);
setGraphic(null);
}
else
{
boolean selected = combo.getValue().equals(item);
rectangle.setFill(selected ? Color.GREENYELLOW : Color.RED);
setGraphic(rectangle);
setText(item);
}
}
};
}
});
content.getChildren().add(combo);
return content;
}
}
解決方法正常工作 - 對這樣一個基本問題感到驚訝。 – wzberger
完成 - 你的報告https://bugs.openjdk.java.net/browse/JDK-8145588 – wzberger
@wzberger uppened優先級 - 交叉手指,它會保持(至少它會引起別人的注意,當有人將再次降低它; - ) – kleopatra