2015-11-05 46 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的警告 –