Значок 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());