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

Java 如何调整JComboBox的滚动元素的大小?,java,swing,jscrollpane,jcombobox,custom-component,Java,Swing,Jscrollpane,Jcombobox,Custom Component,我的程序中有几个JComboxes。我想改变滚动条和箭头按钮的大小,使它们更宽。我需要它,因为我想在Windows平板电脑上使用该程序,而且它太小,手指无法使用。 有没有可能这样做 这是我的代码。这并不容易,但有一个解决方案,您必须将jcombobox子类化 您必须子类化JComboBox,才能访问comboxui。为此,您可以在对象实例化期间设置自己的自定义ComboBox UI(我们在所有构造函数中进行更改,请参见CustomComboBox中的init()) 访问ComboboxPopu

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


这是我的代码。

这并不容易,但有一个解决方案,您必须将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));