簡體   English   中英

Java刪除JComboBox箭頭按鈕

[英]Java remove JComboBox arrow button

我使用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方法。 至少,我認為您可以這樣做。 請注意,每次用戶選擇一個選項時,您都必須更新文本框中的內容。

解決此問題的一種怪異方法是創建您自己的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());

此實現不應干擾自動完成行為,但是,我自己尚未使用自動完成功能對其進行測試,因此無法確定地說。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM