Значок UIManager и JCheckBox

Мой GUI имеет JTable со столбцом, который имеет логический тип, который отображается как JCheckBox. Металлические цвета не подходят для моего GUI, поэтому я использовал следующий код:

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

Я получил невыбранный флажок, который хотел, но в UIManager нет ключа, который я мог бы изменить, чтобы настроить выбранный JCheckBox. Есть ли способ изменить выбранный вид JCheckBox глобально? PS Я пробовал и непрозрачный, и прозрачный фон, результат тот же - флажок работает не так, как должен.

2 ответа

Переопределить paintIcon метод Icon рисовать разные значки, когда он выбран или нет.

Это демонстрация ответов о переполнении стека, как реализовать три состояния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());
Другие вопросы по тегам