Java 保留默认UI,同时更改某些方面

Java 保留默认UI,同时更改某些方面,java,swing,combobox,Java,Swing,Combobox,我目前有一个JComboBox,它总是设置在屏幕的底部,所以内容总是向上。鉴于我希望它上升,我想改变组合框上箭头的方向。我目前是这样做的: comboBox.setUI(new BasicComboBoxUI() { @Override protected JButton createArrowButton() { return new BasicArrowButton(BasicArrowButton.NORTH); } }); 但在执行此操作时,组合

我目前有一个JComboBox,它总是设置在屏幕的底部,所以内容总是向上。鉴于我希望它上升,我想改变组合框上箭头的方向。我目前是这样做的:

comboBox.setUI(new BasicComboBoxUI()
{
    @Override
    protected JButton createArrowButton() {
        return new BasicArrowButton(BasicArrowButton.NORTH);
    }
});

但在执行此操作时,组合框会变成一种灰色版本。我如何使它成为默认的ComboBoxUI,但箭头朝上?

如果您查看源代码,您将看到BasicComboxUI中该方法的默认实现是:

protected JButton createArrowButton() {
    JButton button = new BasicArrowButton(BasicArrowButton.SOUTH,
                                UIManager.getColor("ComboBox.buttonBackground"),
                                UIManager.getColor("ComboBox.buttonShadow"),
                                UIManager.getColor("ComboBox.buttonDarkShadow"),
                                UIManager.getColor("ComboBox.buttonHighlight"));
    button.setName("ComboBox.arrowButton");
    return button;
}

当然,覆盖BasicComboxUI意味着您失去了LAF UI。例如,您可能会松开Windows和MAC自定义LAF。您确实需要覆盖所有要支持的LAF的UI。

如果查看源代码,您将在BasicComboxUI中看到该方法的默认实现是:

protected JButton createArrowButton() {
    JButton button = new BasicArrowButton(BasicArrowButton.SOUTH,
                                UIManager.getColor("ComboBox.buttonBackground"),
                                UIManager.getColor("ComboBox.buttonShadow"),
                                UIManager.getColor("ComboBox.buttonDarkShadow"),
                                UIManager.getColor("ComboBox.buttonHighlight"));
    button.setName("ComboBox.arrowButton");
    return button;
}
当然,覆盖BasicComboxUI意味着您失去了LAF UI。例如,您可能会松开Windows和MAC自定义LAF。您确实需要覆盖所有要支持的LAF的UI