【问题标题】:UIManager and JCheckBox iconUIManager 和 JCheckBox 图标
【发布时间】:2016-04-09 02:37:56
【问题描述】:

我的 GUI 有 JTable,其列具有布尔类型,显示为 JCheckBox。金属色不适合我的 GUI,所以我使用了下一个代码:

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

我得到了我想要的未选中的复选框,但是 UIManager 中没有我可以更改以自定义选定的 JCheckBox 的键。 有没有办法全局更改选定的 JCheckBox 视图? 附言我尝试了不透明和透明背景,结果是一样的 - 复选框不能正常工作。

【问题讨论】:

标签: java swing uimanager


【解决方案1】:

覆盖IconpaintIcon 方法以在选中或未选中时绘制不同的图标。

This is a stack overflow answer demos how to implement a tri-states JCheckBox

【讨论】:

    【解决方案2】:

    我在互联网上找到了解决方案并为自己更改了它。

    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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      相关资源
      最近更新 更多