Недоступный компонент

Рейтинг: 2Ответов: 1Опубликовано: 25.06.2011

Пишу простой компонент пользовательского интерфейса. Завожу объект типа JComponent и переопределяю метод paintComponent. Компонент умеет отображать картинку, заданную в качестве параметра и xитрым способом дорисовывать что-то поверx картинки и рядом с ней. Здесь, для примера, пусть она перечеркивает картинку красным. Компонент реагирует на события мыши и т.д. Иногда требуется показать, что наша "кнопка" недоступна пользователю, disabled, серенькая. Как сделать так, чтобы наша "кнопка" становилась серенькой? Про узоры, которые я дорисовываю более менее понятно: я могу поставить условие, какой цвет выбирать. А что делать с картинкой? Как её отобразить?

Код примерно такой:

import javax.swing.*;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        JComponent c = new JComponent() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                ImageIcon ia = new ImageIcon("icon.png");
                ia.paintIcon(null, g, 0, 0);
                g.setColor(isEnabled()? Color.RED : Color.GRAY);
                g.drawLine(0, 0, ia.getIconWidth(), ia.getIconHeight());
            }
        };
        c.setEnabled(false);
        frame.add(c);
        frame.setVisible(true);
    }
}

Ответы

▲ 2Принят

Для ImageIcon - LookAndFeel.getDisabledIcon, первый параметр - типа JComponent, согласно документации может быть равен null:

ImageIcon ia = new ImageIcon("icon.png");
if (!isEnabled())
    ia = UIManager.getLookAndFeel().getDisabledIcon(null, ia); 
ia.paintIcon(null, g, 0, 0);