JavaFX:如何更改组合框/ ChoiceBox下拉按钮位置?
问题描述:
所以,大家应该很简单,但我找不到答案。我在CSS方面的知识非常有限。JavaFX:如何更改组合框/ ChoiceBox下拉按钮位置?
我想将ComboBox/ChoiceBox的“下拉按钮”或“箭头”移动到组件的左侧,而不是右侧。
我找到了一种方法,使箭头透明的,就像这样:
.combo-box .arrow-button {
-fx-background-color: transparent;
}
这是我将箭头移动到左侧幼稚的做法:
.combo-box .arrow-button {
-fx-alignment: LEFT;
}
那么,有没有人知道这是否有可能实现? 如何?谢谢!!
答
您必须设置NodeOrientation。问题是,NodeOrientation的StyleableProperty还不被支持,所以你不能用css来设置它。
检查线路6136在javafx.scene.Node - >节点#nodeOrientationProperty
设置中的代码或FXML
答
组合框本身的定位并不支持样式属性“-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));
'.getListView()'是受限制的访问,所以这会给出Java8的警告 –