簡體   English   中英

UIManager和JCheckBox圖標

[英]UIManager and JCheckBox icon

我的GUI的JTable的列類型為boolean,顯示為JCheckBox。 金屬顏色不適合我的GUI,因此我使用了下一個代碼:

ImageIcon icon = new ImageIcon(MyGUI.class.getResource("resources/checkbox1.png"));
UIManager.put("CheckBox.icon", icon1);

我得到了想要的未選擇復選框,但是UIManager中沒有可以更改以自定義選擇的JCheckBox的鍵。 有沒有辦法全局更改選定的JCheckBox視圖? PS我嘗試了不透明和透明的背景,結果是一樣的-復選框無法正常工作。

覆蓋IconpaintIcon方法,以在選擇或不選擇它時繪制不同的圖標。

這是一個堆棧溢出答案演示,演示了如何實現三態JCheckBox

我在互聯網上找到了解決方案,並為自己進行了更改。

class CheckBoxIcon implements Icon {
    public void paintIcon(Component component, Graphics g, int x, int y) {
        AbstractButton abstractButton = (AbstractButton)component;
        ButtonModel buttonModel = abstractButton.getModel();

        if(buttonModel.isSelected()) 
            g.drawImage(createImage("resources/checkbox2.png"), x, y, component);
        else
            g.drawImage(createImage("resources/checkbox1.png"), x, y, component);
    }
    public int getIconWidth() {
        return 13;
    }
    public int getIconHeight() {
        return 13;
    }

    protected Image createImage(String path) {
        URL imageURL = CheckBoxIcon.class.getResource(path);
        Image icn = null;

        if (imageURL == null) {
            if(null==icn){
                //System.out.println("path: "+path);
                icn = new ImageIcon (MyGUI.class.getResource(path)).getImage();
                if(null!=icn)
                    return icn;
                else{ 
                    System.err.println("Resource not found: " + path);
                    return null;
                }
            }
            return null;
        } else {
            return (new ImageIcon(imageURL)).getImage();
        }
    }
}

然后在代碼中使用此行。

UIManager.put("CheckBox.icon", new CheckBoxIcon());

暫無
暫無

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

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