2015-11-05 250 views
1

所以,大家應該很簡單,但我找不到答案。我在CSS方面的知識非常有限。JavaFX:如何更改組合框/ ChoiceBox下拉按鈕位置?

我想將ComboBox/ChoiceBox的「下拉按鈕」或「箭頭」移動到組件的左側,而不是右側。

就像下面的圖片: ComBox with arrow on left side

我找到了一種方法,使箭頭透明的,就像這樣:

.combo-box .arrow-button { 
    -fx-background-color: transparent; 
} 

這是我將箭頭移動到左側幼稚的做法:

.combo-box .arrow-button { 
    -fx-alignment: LEFT; 
} 

那麼,有沒有人知道這是否有可能實現? 如何?謝謝!!

回答

0

您必須設置NodeOrientation。問題是,NodeOrientation的StyleableProperty還不被支持,所以你不能用css來設置它。

檢查線路6136在javafx.scene.Node - >節點#nodeOrientationProperty

設置中的代碼或FXML

1

組合框本身的定位並不支持樣式屬性「-fx對齊」 - 只有編輯器(textField)。

您可以擴展ComboBoxBaseSkin(ComboBoxListViewSkin),覆蓋#layoutChildren()並自己定位箭頭按鈕,或者簡單地更改節點方向,就像下面的示例中一樣。但是,更改節點方向會影響完整的內容 - 意味着編輯器和彈出窗口內容。您可以通過應用相反的(由於RTL)對齊方式或通過將NodeOrientation更改爲LTR來修復此問題,就像爲popop的ListView一樣。

combo.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT); 
combo.getEditor().setStyle("-fx-alignment: baseline-right"); 
combo.setOnShowing(evt -> ((ComboBoxListViewSkin<?>)combo.getSkin()).getListView().setNodeOrientation(NodeOrientation.LEFT_TO_RIGHT)); 
+0

'.getListView()'是受限制的訪問,所以這會給出Java8的警告 –