JTextField mit wechselnde mousehover Hintergrundbild versehen?!
MrSchmidtdt
- java
0 MudGuard
Hallo,
ich möchte mein JTextField mit einer eigenen Hintergrundgrafik versehen, welche bei Mauseintritt oder alternativ, bei gesetzem Focus, zu einem anderen vordefinierten Hintergrundbild schaltet.
Bislang habe ich eine eigene TextField Klasse angelegt, welche vom JTextField erbt und die dortige drawImage() Methode, welche für den Hintergrund zuständig ist, mit entsprechendem Parameter (meinem Hintergrundbild) überschreibt.
Das Ganze funktionier so halbwegs.. schwierig ist der Wechsel.. ich habe das Feld vom GUI Controller aus mit einem MouseListener versehen.. kann hier nun aber nicht einfach einen andere IMG als Parameter mitgeben und repaint()en, da ich eben nur das aktive TextField verändern möchte..
Gibt es da eine bessere Lösung? Bzw einen ganz anderen Ansatz?
Mit freundlichen Grüßen,
Mr.Schmidtdtdt
Hi,
Bislang habe ich eine eigene TextField Klasse angelegt, welche vom JTextField erbt und die dortige drawImage() Methode, welche für den Hintergrund zuständig ist, mit entsprechendem Parameter (meinem Hintergrundbild) überschreibt.
Kannst Du mal den Code zeigen?
Mir ist nicht klar, was Du da treibst.
Ich hätte vom Prinzip her folgendes gemacht:
Initialisierung:
Image imgStandard = ImageIO.read(new URL(getClass().getResource("standard.gif"), "standard.gif"));
Image imgHover = ImageIO.read(new URL(getClass().getResource("hover.gif"), "hover.gif"));
Image imgFocus = ImageIO.read(new URL(getClass().getResource("focus.gif"), "focus.gif"));
Image imgFocusHover = ImageIO.read(new URL(getClass().getResource("focushover.gif"), "focushover.gif"));
//usw, für jeden gewünschten Zustand ein Bild definieren ...
Image currentImage = imgStandard; //wenn die Control erzeugt wird, wird erstmal das Standard-Bild benutzt.
Die paintComponent-Methode wertet dann aus, welches Bild für diese Instanz gerade das gültige ist, und zeichnet das:
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(currentImage != null)
{
g.drawImage(currentImage, 0,0,this.getWidth(),this.getHeight(),this);
}
}
Und im jeweiligen Event-Handler (Focus, Blur, MouseOver, MouseOut, ...) wird dann einfach nur noch currentImage auf das richtige Bild umgesetzt und ggf. noch der repaint angestoßen.
cu,
Andreas