如何翻转jComboBox,使弹出菜单按钮位于左侧而不是右侧?

我努力了:

setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);


但结果如下:

java - 如何翻转jcombobox?-LMLPHP

最佳答案

下拉箭头的位置由与ComboBoxUI关联的JComboBox控制。通常,如果要更改此行为,则必须创建自己的ComboBoxUI实现。幸运的是,对于您的特定需求,还有另一种方法。默认的ComboBoxUI编码为默认情况下将箭头放置在右侧,但是如果组件方向从右到左更改,它将把箭头放置在左侧:

JComboBox<String> comboBox = new JComboBox<>(new String[]{"One", "Two", "Three"});
comboBox.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);


java - 如何翻转jcombobox?-LMLPHP

如您所见,这将影响整个组件的方向,但不会影响组合框内列表框项目的方向。要进行此调整,请在与组件关联的applyComponentOrientation上调用ListCellRenderer。如果您具有自定义渲染器,则可以仅在该对象上调用方法。使用默认渲染器,虽然有点棘手,但仍然可以:

ListCellRenderer<? super String> defaultRenderer = comboBox.getRenderer();
ListCellRenderer<String> modifiedRenderer = new ListCellRenderer<String>() {
    @Override
    public Component getListCellRendererComponent(JList<? extends String> list, String value, int index,
            boolean isSelected, boolean cellHasFocus) {
        Component component = defaultRenderer.getListCellRendererComponent(
                list, value, index, isSelected, cellHasFocus);
        component.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        return component;
    }
};
comboBox.setRenderer(modifiedRenderer);


java - 如何翻转jcombobox?-LMLPHP

最后,如果组合框是可编辑的,则可能还需要在编辑器组件上使用applyComponentOrientation

关于java - 如何翻转jcombobox?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47614915/

10-12 01:35