Java删除JComboBox箭头按钮

Java删除JComboBox箭头按钮,java,swing,jcombobox,Java,Swing,Jcombobox,我使用netbeans IDE从调色板中添加了一个JComboBox,并用mysql数据库中的内容填充它。我还使用swingx-all-1.6.5-1添加了自动完成功能 填充组合框的方法 public void doPopulateCombo(){ Connection con = Functions.ConnectToDB(); try { Statement stmt = con.createStatement(); String sq

我使用netbeans IDE从调色板中添加了一个JComboBox,并用mysql数据库中的内容填充它。我还使用swingx-all-1.6.5-1添加了自动完成功能

填充组合框的方法

    public void doPopulateCombo(){
    Connection con = Functions.ConnectToDB();
    try {
        Statement stmt = con.createStatement();
        String sqlQuery = "select * from products";
        ResultSet rs = stmt.executeQuery(sqlQuery);

        while(rs.next()){
            String product_name = rs.getString("Product_Name");
            cboProducts.addItem(product_name);
        }
        con.close();
        cboProducts.setSelectedIndex(-1);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "Error populating combo box\n"+e.toString(),
                "Error",JOptionPane.ERROR_MESSAGE);
    }
}

如何删除组合框的箭头按钮,使其看起来像一个文本框?

我能想到的最好方法是将其放入一个比它稍小的JPanel中,但根据L&F,这并不是最好的方法。或者,您可以创建一个扩展JComboBox的类,重写paint(Graphics g)方法,并从中调用具有相同维度的文本框的paint方法。至少,如果你愿意,我认为你可以这样做。请注意,每次用户选择一个选项时,您都必须更新文本框中的内容。

解决此问题的一个简单方法是创建自己的BasicComboxUI实现并覆盖createArrowButton()

然后在现有代码中:

    cboProducts.setSelectedIndex(-1);
    cboProducts.setUI(new NoArrowJComboBoxUI());

此实现不应干扰自动完成行为,但是,我自己还没有用自动完成测试过它,所以我不能肯定地说。

可能的复制不真的会删除箭头按钮,但会更改自动完成行为。它不会选择列表中的自动建议项。关于如何做到这一点,您有什么建议吗?上面链接中接受的答案有另一种解决方案,使用
JTextField
AutoCompleteDecorator
。它确实会有一点干扰,因为自动建议的项目不会在列表中自动选择,而只是在组合框中自动完成
    cboProducts.setSelectedIndex(-1);
    cboProducts.setUI(new NoArrowJComboBoxUI());