Hover-Farbe über Hintergrundfarbe legen

mabuhay

Bekanntes Mitglied
Hallo

Ich habe eine Liste mit JPanels. Beim überfahren der Maus soll sich der Hintergrund gelb färben. Die JPanels sind jeweils abwechslungsweise mit unterschiedlicher grauer Farbe hinterlegt.

Nun möchte ich dass beim überfahren der Maus die gelbe Hover-Farbe mit der Hintergrundfarbe "gemischt" wird. Also dass beim überfahren eines JPanels mit dünklerer grauer Farbe auch die gelbe Hover-Farbe etwas dünkler wird.

Hat mir jemand einen guten Tipp wie ich das anstellen könnte?

mfg
 
Mach die gelbe Farbe teilweise transparent, dies kann mit dem Konstruktor
Code:
Color(int r, int g, int b, int a)
erreicht werden.
 
Wenn die Panels nur unterschiedliche Grauwerte haben, könntest Du
einfach einen gemeinsamen MouseListener für diese Panels anlegen
und dann ähnlich wie folgt vorgehen:

Java:
//...    
    Color savedBackground = null;
//...    
    @Override
    public void mouseEntered(MouseEvent e) {
        JPanel p = (JPanel) e.getSource();
        
        Color backColor = p.getBackground();
        Color hoverColor  = Color.yellow;
        
        int red   = (backColor.getRed()   + hoverColor.getRed())/2;
        int green = (backColor.getGreen() + hoverColor.getGreen())/2;
        int blue  = (backColor.getBlue()  + hoverColor.getBlue())/2;
        Color mixColor  = new Color(red,green,blue);

        savedBackground = backColor;
        p.setBackground(mixColor);
    }

    @Override
    public void mouseExited(MouseEvent e) {
        JPanel p = (JPanel) e.getSource();
        if (savedBackground!=null) {
            p.setBackground(savedBackground);
        }
    }

//...

Du kannst natürlich noch mit der Berechnung spielen, oder z.B. in Zeile 9 statt
Color.yellow ein etwas dunkleres Gelb übergeben, um so das für Dich optimale
Ergebnis zu erzielen.

Ist vielleicht nicht ganz so elegant, aber Du sparst Dir damit den Umweg
über eine zu überschreibende paintComponent() oder einem BufferedImage
in dem Du mit AlphaComposite oder transparenter Color die neue Farbe mischt.

VG ROlf
 

Zurück
Oben