我使用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);
}
}
如何删除组合框的箭头按钮,使其显示为文本框?
答案 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());
此实现不应该干扰自动完成行为,但是,我没有使用自动完成功能自行测试,所以我不能肯定地说。