Fade / Redraw / Modify ImageIcon по клику в SWING JLabel на лету - PullRequest
3 голосов
/ 17 июля 2010

Я хочу, чтобы JLabel с иконкой выглядела «нажатой» при щелчке мышью по метке.Метка содержит ImageIcon.Вместо того, чтобы сменить иконку на другую, я хочу перерисовать ImageIcon с другим набором цветов (например, setXORMode (new Color (255,0,0)) "на лету". У кого-нибудь есть подсказка, как это сделать?

JLabel my_label = new JLabel("");
my_label.setIcon(new ImageIcon(MyClass.class.getResource("/path/to/resources/myicon.jpg")));
my_label.addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        //HERE I NEED THE VODOO :)
    }
});

Ответы [ 2 ]

2 голосов
/ 17 июля 2010

Предполагая, что вы считали образ с диска, вы сделали бы что-то вроде этого.

URL url = getClass().getResource("images/BB.jpg");
BufferedImage picture = ImageIO.read(url);

Позже, когда вам нужно изменить XOrMode, вы сделаете следующее:

Graphics2D g = picture.createGraphics();
g.setXORMode(new Color(255,0,0) )
g.dispose();

ЕслиВы хотите исчезнуть / исчезнуть, я бы порекомендовал рамки времени .Кроме того, если вы хотите перекрасить часть самой метки в дополнение к изображению в метке, вы можете переопределить void paintComponent(Graphics g).

Очень хорошим ресурсом, который вы могли бы рассмотреть, является книга Грязные богатые клиенты .Это полно такого рода вещей.Если вы посмотрите примеры на веб-сайте из главы 4, то приведите пример кода с изображением, который может оказаться полезным.Это была бы очень и очень хорошая книга для вас.

2 голосов
/ 17 июля 2010

Я бы использовал LookupOp, чтобы изменить копию иконки при ее загрузке.Затем используйте setIcon() в обработчике мыши.

...