如何调整 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));
您将在创建组合框之前执行该代码。
我的程序中有几个 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));
您将在创建组合框之前执行该代码。