如何调整JComboBox的滚动元素?

时间:2016-02-17 11:51:17

标签: java swing jscrollpane jcombobox custom-component

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

enter image description here

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);

这是我的代码。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

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

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

然后我们最终可以从Popup中调整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); } } 并改变其外观(设置自定义宽度)。

ComboboxUI

这是允许您访问ComboboxPopup的自定义public class CustomComboBoxUI extends BasicComboBoxUI{ protected ComboPopup createPopup() { return new CustomComboBoxPopup( comboBox ); } } (非常简单):

ComboboxPopup

感谢自定义public class CustomComboBoxPopup extends BasicComboPopup{ public CustomComboBoxPopup(JComboBox combo) { super(combo); } @Override protected void configureScroller() { super.configureScroller(); scroller.getVerticalScrollBar().setPreferredSize(new Dimension(40, 0)); } } 只需要基本的构造函数覆盖,并且只更改了一个方法(将scrollpan的大小设置为40px):

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

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

SELECT store_name, latitude FROM (`stores`)
WHERE (latitude BETWEEN '-1' AND '-12')

The Result:
"BELEM UMARIZAL"            "-1.4454262"
"BELEM NAZARE DUQUE"        "-1.454061"
"BELEM SUPERCENTER NAZARE"  "-1.4595652"
"BELEM BATISTA CAMPOS"      "-1.459802"
"ARACAJU"                   "-10.9336128"
"BELEM DOMINGOS MARREIROS"  "-1.4443628"
"PALMAS "                   "-10.178152"
"SINOP"                     "-11.8573162"
"ARACAJU JARDINS"           "-10.942702"

SELECT store_name, latitude FROM (`stores`)
WHERE store_name like '%RIO BRANCO%'

The Result:
"RIO BRANCO"            "-9.9462713"
"RIO BRANCO AVIÁRIO"    "-9.965754700000002"

enter image description here

另请参阅setting size of scrollersetting size of combobox以获取进一步的帮助......