我想以與 C# XAML 文件中相同的方式定義按鈕的填充。而不是寫這樣的東西:<Button fx:id="btn1" ...> <padding> <Insets top="0" right="5" bottom="10" left="5" /> </padding></Button><Button fx:id="btn2" ...> <padding> <Insets topRightBottomLeft="5" /> </padding></Button>,寫起來會更容易:<Button fx:id="btn1" ... padding="0 5 10 5" /><Button fx:id="btn2" ... padding="5" />我不知道為什么“填充”屬性有這個限制。我在FXML 文檔中看到,類型強制可以通過為給定類型實現valueOf()方法來完成:public static Insets valueOf(String info) { // Data retrieval}但我不知道將它放在哪里,因為Insets類被鎖定(JDK)。因為這是一個靜態方法,我認為該方法可以在其他地方實現,但啟動應用程序總是給我一個強制錯誤:Caused by: java.lang.IllegalArgumentException: Unable to coerce 0 5 10 5 to class javafx.geometry.Insets.目前,我找到的唯一解決方案是:定義一個名為GButton的新 FXML 組件,它繼承了Button定義一個繼承Insets的Spacing類,并為該類實現一個valueOf方法為 GButton 添加一個“space”屬性(ObjectProperty<Spacing>的實例),其行為與“padding”相同,并定義其 getter 和 setter。有沒有一種簡單的方法可以在 Button 標記中定義 FXML“填充”,而無需創建從 Insets 繼承的類?順便說一句,如果問題有用,別忘了投票:)
2 回答

慕的地6264312
TA貢獻1817條經驗 獲得超6個贊
我不知道為什么“填充”屬性有這個限制。我在 FXML 文檔中看到,類型強制可以通過實現
valueOf()
給定類型的方法來完成
這需要Insets
實現一個static
?valueOf(String)
方法。那個類型不存在這個方法;因此您不能簡單地通過屬性指定值。
FXML簡介:
可以通過在目標類型上
static valueOf()
定義一個方法來實現其他轉換。
不過,您可以使用該style
屬性通過 CSS 指定值。這通常比將對象分配給屬性更短:
<Button?fx:id="btn1"?style="-fx-padding:?0?5?10?5;"?.../>

收到一只叮咚
TA貢獻1821條經驗 獲得超5個贊
我知道這個問題很老,但希望我能提供一些有見地的信息。我有同樣的問題;?不幸的是,FXML 沒有完整的文檔,但在我看來,將初始化模型拼湊在一起使其變得直觀。
無論如何,您采用了正確的方法,只是沒有完全完成:
<padding> ????<Insets?top="10"?right="20"?bottom="30"?left="40"/> ????</padding>
將創建一個等效于 CSS 的填充padding: 10 20 30 40
,當然,您可以更改它(甚至使用我假設的 FXML 變量)。
不過,一般來說,任何具有javafx.beans
適當約定屬性的類,您都可以很容易地在 FXML 中創建自定義組件并像上面那樣分配成員值。
希望這對任何人都有幫助!
添加回答
舉報
0/150
提交
取消