[英]How to create a Shape with two Circles in it?
我创建了一个ListView,它根据对象字段动态绘制某种颜色的圆。 单元可以具有三个状态,即已导出,具有必填信息,而没有一个。 他们有自己的圈子颜色的前两个,我想“没有任何”同时实现其图形的两个圆的。 问题是您只能为一个单元格设置一个图形。
我尝试通过更改圆的centerX并在两个圆上都使用Shape.union来找到一种解决方法,但它仅显示circEx。 有什么办法可以实现呢?
listView.setCellFactory(new Callback<ListView<BusinessCard>, ListCell<BusinessCard>>(){
@Override
public ListCell<BusinessCard> call(ListView<BusinessCard> list){
return new ColorCell();
}
});
//Colors circled that indicates status of card on listView
static class ColorCell extends ListCell<BusinessCard> {
@Override
public void updateItem(BusinessCard item, boolean empty) {
super.updateItem(item, empty);
//Probably should have one circle and setFil in if statements
Circle circMan = new Circle(0,0,3,Color.web("#ff9999"));
Circle circEx = new Circle(10,0,3,Color.web("#808080")); // old #e1eaea
Circle circDone = new Circle(0,0,3,Color.web("#99ff99")); //old #99ff99
if(item != null){
setTextFill(Color.BLACK);
setText(item.toString());
if(item.wasExported() && !item.hasMand()){
setGraphic(Shape.union(circMan, circEx)); //TODO
}
else if(item.wasExported()){
setGraphic(circEx);
}
else if(!item.hasMand()){
setGraphic(circMan);
}
else{
setGraphic(circDone);
}
}
}
}
您可以使用Pane
作为graphic
,例如HBox
。
另外,您可能不应该在updateItem
方法中一遍updateItem
重新创建圆。
static class ColorCell extends ListCell<BusinessCard> {
private final Circle manDone = new Circle(3);
private final Circle ex = new Circle(3);
private final HBox circles = new HBox(4, manDone, ex);
private static final Color EXPORTED_COLOR = Color.web("#808080");
private static final Color MAN_COLOR = Color.web("#ff9999");
private static final Color DONE_COLOR = Color.web("#99ff99");
{
setGraphic(circles);
// hide circles
manDone.setFill(Color.TRANSPARENT);
ex.setFill(Color.TRANSPARENT);
setTextFill(Color.BLACK);
}
@Override
public void updateItem(BusinessCard item, boolean empty) {
super.updateItem(item, empty);
if (item == null) {
// hide circles
manDone.setFill(Color.TRANSPARENT);
ex.setFill(Color.TRANSPARENT);
setText(null);
} else {
setText(item.toString());
ex.setFill(item.wasExported() ? EXPORTED_COLOR : Color.TRANSPARENT);
manDone.setFill(item.hasMand()
? (item.wasExported() ? DONE_COLOR : Color.TRANSPARENT)
: MAN_COLOR);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.