Java删除JComboBox箭头按钮

时间:2017-04-28 14:32:58

标签: 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 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);
    }
}

如何删除组合框的箭头按钮,使其显示为文本框?

2 个答案:

答案 0 :(得分:0)

我能想到的最好的是将它放入比它略小的JPanel中,但取决于L& F,这并不是最好的方法。或者你可以创建一个扩展JComboBox的类,覆盖paint(Graphics g)方法,并从那里调用具有相同尺寸的文本框的paint方法。至少,如果你愿意,我想你可以做到。请注意,每次用户选择选项时,您都必须更新文本框中的内容。

答案 1 :(得分:0)

修复此问题的一种黑客方法是创建自己的BasicComboBoxUI实现并覆盖createArrowButton()

public class NoArrowJComboBoxUI extends BasicComboBoxUI {

    @Override
    protected JButton createArrowButton() {
        JButton btn = new JButton();
        btn.setPreferredSize(new Dimension(0,0));
        btn.setVisible(false);
        return btn;
    }

}

然后在您现有的代码中:

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

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