繁体   English   中英

如何创建一个带有两个圆的形状?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM