Java 如何调整JComboBox的滚动元素的大小?
我的程序中有几个JComboxes。我想改变滚动条和箭头按钮的大小,使它们更宽。我需要它,因为我想在Windows平板电脑上使用该程序,而且它太小,手指无法使用。 有没有可能这样做Java 如何调整JComboBox的滚动元素的大小?,java,swing,jscrollpane,jcombobox,custom-component,Java,Swing,Jscrollpane,Jcombobox,Custom Component,我的程序中有几个JComboxes。我想改变滚动条和箭头按钮的大小,使它们更宽。我需要它,因为我想在Windows平板电脑上使用该程序,而且它太小,手指无法使用。 有没有可能这样做 这是我的代码。这并不容易,但有一个解决方案,您必须将jcombobox子类化 您必须子类化JComboBox,才能访问comboxui。为此,您可以在对象实例化期间设置自己的自定义ComboBox UI(我们在所有构造函数中进行更改,请参见CustomComboBox中的init()) 访问ComboboxPopu
这是我的代码。这并不容易,但有一个解决方案,您必须将jcombobox子类化 您必须子类化
JComboBox
,才能访问comboxui
。为此,您可以在对象实例化期间设置自己的自定义ComboBox UI
(我们在所有构造函数中进行更改,请参见CustomComboBox
中的init()
)
访问ComboboxPopup
需要ComboBoxUI
。我们只需将默认的ComboboxPopup
替换为自定义的ComboboxPopup
。您必须知道,ComboboxPopup
负责创建下拉菜单,当您单击按钮时弹出该菜单
最后,我们可以从弹出窗口中调整JScrollPane
,抓取垂直JScrollBar
并改变其外观(设置自定义宽度)
谢天谢地,定制的ComboboxPopup
只需要覆盖基本构造函数,只需更改一个方法(将滚动条的大小设置为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
String[]data=新字符串[]{“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”};
CustomComboBox comboBox=新的CustomComboBox(数据);
comboBox.setPreferredSize(新维度(50,50));//设置所需的大小
另请参见和获取更多帮助…您可以使用UIManger控制滚动条的宽度:
UIManager.put("ScrollBar.width", new Integer(50));
您可以在创建组合框之前执行该代码。旁注:这不是JavaScript,Java是类型安全的。您可以在
getItem()上调用toString()
而不是动态创建字符串。每次连接字符串时,您都会填充字符串池。嗯,也许JavaFX是使用Windows平板电脑的更好方法?因为在JavaFX中,您可以使用CSS设置元素样式:…似乎如果组合框太小,可能会出现其他问题,JavaFX可以更轻松地解决这些问题?H看一看下面的讨论:看一看下面的讨论:似乎我忘记了很多注释@Override
我相信你可以自己添加它们^^^^哇,那太好了^^-我真的很抱歉,现在我不得不杀了你^^^没有什么个人的=)(+1)有趣,但这不会改变程序中任何滚动条的宽度吗?或者您可以在创建组合框之前更改该值,并在创建组合框之后将以前的值放回以保留默认的滚动条宽度吗?@TT这不会改变程序中任何滚动条的宽度吗?
——这是本例中的要求<代码>…并在创建组合框后返回上一个值
-我对这样一个问题的标准回答是,试试看!它是一行代码,您可以添加到任何程序中。我尝试了这个例子:并且能够创建两个不同宽度的组合框。我没有尝试使用JList或JTable等@TT。我也尝试过——您可以用最好的方式首先从UIManager获取值:objectoriginalvalue=UIManager.get(“ScrollBar.width”)代码>然后将值保留为原始值!
public class CustomComboBoxUI extends BasicComboBoxUI{
protected ComboPopup createPopup() {
return new CustomComboBoxPopup( comboBox );
}
}
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
UIManager.put("ScrollBar.width", new Integer(50));