2014-05-22 23 views
0

我有一個JavaFX應用程序。 TabPane中的某些選項卡有一個「my-view」類,內部有一個複雜的結構,包含標籤,文本字段等。我有一個CSS規則來設置字體大小在這些子項,如:在JavaFX中動態調整CSS字體大小規則

.my-view .label, .my-view .my-text-field-a, .my-view .my-text-field-b { 
    -fx-font-size: 12px; 
} 

我想允許用戶按Ctrl- +動態增加文字大小。我真正想要的是能夠動態地動態調整上述CSS中的「12px」。但是,我看不到在JavaFX中執行此操作的方法。 setStyle方法只允許爲當前節點設置樣式,而不是如上所述的規則。新的JavaFX 8 StyleableProperty接口似乎對我來說是錯誤的 - 它允許代碼讀取但不寫入CSS屬性。我真的不想在代碼中自己找到所有相關的文本字段,並調用setFont; CSS規則在這裏似乎是正確的機制。

我現在認爲要做到這一點的唯一方法是爲每個可能要設置的字體大小創建一個新類(有點像這裏建議的:Hot to update dynamically font size),然後設置相應的類來設置大小,例如

.my-view-12 .label, .my-view-12 .my-text-field-a, .my-view-12 .my-text-field-b { 
    -fx-font-size: 12px; 
} 

.my-view-14 .label, .my-view-14 .my-text-field-a, .my-view-14 .my-text-field-b { 
    -fx-font-size: 14px; 
} 

我可以自動生成的CSS(適用於所有字體大小說1-100),但這種方法似乎只是一個醜陋的黑客。有沒有更好的方法在JavaFX中做到這一點?

+0

是否所有文本都顯示在標籤內,使用相同(可更改)字體大小的類「my-view」? –

+0

目前,是的,儘管這可能不是這種情況(因此我使用my-text-field-類而不是文本字段)。在這種情況下有更簡單的解決方案嗎?我確實嘗試使用-fx-font-size的「繼承」值,但在終端上出現了很多錯誤。 –

回答

2

如果一切都與「我的視圖」的風格類將使用相同的字體,節點下顯示的文本,那麼你可以做

.my-view { 
    -fx-font-size: 12 px ; 
} 

在CSS文件。

要更新,選擇一些節點是所有節點的祖先,這些節點具有「my-view」風格類(聽起來您的選項卡窗格可以工作,但通常情況下,您可以只使用場景的根節點)和做

for (Node n: tabPane.lookupAll(".my-view")) { 
    n.setStyle("-fx-font-size: "+fontSize+"px;"); 
} 

你顯然需要跟蹤的字體大小的Java代碼中,這是很簡單的(只是做它從一開始)。

如果只有一部分文本顯示節點的字體大小會發生變化,那麼您可能必須給它們一個自己的樣式類,然後查找該特定的樣式類,而不是「我的看法」。