如何调整 JComboBox 的滚动元素的大小?

How can one resize the scrollelements of a JComboBox?

我的程序中有几个 JComboBox。我想以更宽的方式更改滚动条和箭头按钮的大小。我需要它,因为我想在 Windows 平板电脑上使用该程序,而且它太小了,手指无法操作。 有没有可能做到这一点?

JComboBox comboBox;
comboBox = new JComboBox(list_apple_device.toArray());
comboBox.setSelectedItem(null);
comboBox.setFont(schrift);
comboBox.setBounds(1568, 329, 306, 43);
comboBox.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent e) {
        // TODO Auto-generated method stub
        textField.setText(""+e.getItem());
    }
});
getContentPane().add(comboBox);

这是我的代码。

这不是那么容易,但有一个解决方案,你必须继承 jcombobox...

您必须继承 JComboBox 才能访问 ComboBoxUI。为此,您可以在对象实例化期间设置自己的自定义 ComboBoxUI(我们对所有构造函数进行更改,请参阅 CustomComboBox 中的 init()

需要 ComboBoxUI 才能访问 ComboboxPopup。我们用自定义的 ComboboxPopup 简单地替换了默认的 ComboboxPopup。您必须知道 ComboboxPopup 负责创建下拉菜单,当您单击该按钮时会弹出该菜单。

然后我们终于可以从 Popup 中调整 JScrollPane,我们抓住垂直 JScrollBar 并改变它的外观(设置自定义宽度)。

public class CustomComboBox<T> extends JComboBox<T> {

    public CustomComboBox() {
        super();
        init();
    }

    public CustomComboBox(ComboBoxModel<T> aModel) {
        super(aModel);
        init();
    }

    public CustomComboBox(T[] items) {
        super(items);
        init();
    }

    public CustomComboBox(Vector<T> items) {
        super(items);
        init();
    }

    public void init(){
        CustomComboBoxUI ccbui = new CustomComboBoxUI();
        setUI(ccbui);
    }

}

这是允许您访问 ComboboxPopup(非常简单)的自定义 ComboboxUI

public class CustomComboBoxUI extends BasicComboBoxUI{

    protected ComboPopup createPopup() {
        return new CustomComboBoxPopup( comboBox );
    }

}

谢天谢地,自定义 ComboboxPopup 只需要重写基本构造函数并且只更改一个方法(将滚动面板的大小设置为 40px):

public class CustomComboBoxPopup extends BasicComboPopup{

    public CustomComboBoxPopup(JComboBox combo) {
        super(combo);
    }


    @Override
    protected void configureScroller() {
        super.configureScroller();
        scroller.getVerticalScrollBar().setPreferredSize(new Dimension(40, 0));
    }       

}

要设置组合框的大小,您只需调整其大小

String[] data = new String[]{"a","b","c","d","e","f","g","h","i"};
CustomComboBox<String> comboBox = new CustomComboBox(data);
comboBox.setPreferredSize(new Dimension(50,50)); //set the size you wish

另请参阅 setting size of scroller and setting size of combobox 以获取更多帮助...

可以使用UIManger来控制滚动条的宽度:

UIManager.put("ScrollBar.width", new Integer(50));

您将在创建组合框之前执行该代码。