2017-03-17 263 views
0

我試圖在Excel的標籤(真的是TableCell)的左上角或右上角畫一個三角形。 JavaFX labelPadding文檔說:Javafx Labeled labelPaddingProperty - 在左上角或右上角添加三角形

Labeled的文本和圖形內容周圍的填充。默認情況下,labelPadding是Insets.EMPTY,不能設置爲null。 子類可以在此填充之外和Labeled的填充內添加節點。此屬性只能從CSS設置。

因此,我認爲我可以在上面設置樣式爲10px,然後將多邊形添加到標籤,但是在填充工作時,多邊形不繪製。例如,如果我插入這個場景我希望得到上述喂一粉角:

public class JxLabeled extends Labeled { 
    public JxLabeled() { 
     setText("Hello"); 
     Polygon polygon = new Polygon(); 
     polygon.getPoints().addAll(new Double[]{ 
       0.0, 0.0, 10.0, 0.0, 0.0, 10.0 }); 
     polygon.setFill(Color.PINK); 
     getChildren().add(polygon); 
     setStyle("-fx-label-padding: 10 0 0 0;"); 
    } 
} 

應該在哪裏添加的多邊形節點任何想法基於上述文檔嗎?

PS-我意識到我可以創建一個Group或StackedPane來做到這一點,但由於我在TableView中使用它並重寫TableCell,我試圖不爲每個單元格創建一個複合對象。

THX

回答

0

這是由方式TableCell引起初始化它的內容。

TableCell延伸Control因此,當第一次佈局過程中發生皮膚初始化時添加子項。 TableCellSkin取代現有子女,因此將您的Polygon從子女名單中刪除。

你需要使用自己的皮膚來防止這種情況。 (注意:TableCellSkincom.sun包的一部分):

public class ExcelCellSkin<S, T> extends TableCellSkin<S, T> { 

    private final Polygon polygon; 

    public ExcelCellSkin(TableCell<S, T> tableCell) { 
     super(tableCell); 

     this.polygon = new Polygon(0.0, 0.0, 10.0, 0.0, 0.0, 10.0); 
     polygon.setFill(Color.PINK); 
     this.polygon.setManaged(false); 
     getChildren().add(polygon); 
    } 

} 
public class ExcelCell<S, T> extends TableCell<S, T> { 

    { 
     setStyle("-fx-label-padding: 0 0 0 10;"); 
    } 

    @Override 
    protected Skin<?> createDefaultSkin() { 
     return new ExcelCellSkin<>(this); 
    } 

    @Override 
    protected void updateItem(T item, boolean empty) { 
     super.updateItem(item, empty); 

     setText(Objects.toString(item, "")); 
    } 

} 
+0

感謝你的幫助。我發現我必須將修復方法添加到在Excelcell中調用的ExcellCellSkin中:updateItem重新添加多邊形,因爲它似乎在將行添加到表和其他時間時被刪除。但是因爲皮膚並不總是在updateItem被調用時建立的,所以如果getSkin爲null,我也使用了setSkin(createDefaultSkin)。再次感謝!!!! – JLK