Natürlich geht das anders.
Du hast doch eine eigene Button-Klasse. Dann überschreib die setText Methode und ruf dann ein updateImage auf in welchem du dir deinen Button neu zeichnest.
Also so in etwa:
...
Aber das ist doch gar nichts anderes, als wenn ich den Hintergrund in der paintComponent Methode zeichne. Wenn ich in Deinem Fall setText aufrufe, wird dadurch das updateImage aufgerufen und das Bild gezeichnet. Verwende ich bei mit setText, so wird durch paintComponent das Bild neu gezeichnet, es fällt also nur updateImage raus, aber es passiert genau dasselbe, nämlich ein Aufruf an g.drawImage.
Zugegeben, ein Unterschied ist noch, dass du den Text mit in das Bild reinrenderst, aber das macht überhaupt keinen Performance Unterschied (habe ich getestet).
wäre es dir möglich mal einen ScreenShot zu posten,
würde mich interessieren was du da machst und ob da
Buttons überhaupt die gute Lösung sind ?
In diesem Fall mache ich eine einfache Bildschirm-Tastatur (Ich habe aber noch ein paar andere GUIs, in denen Ähnliches passiert). Drücke ich die Shift-Taste, so werden alle Buchstaben auf den Buttons/Tasten groß (a -> A, b -> B, etc.). Und das geschieht in meinem Fall eben auffallend "nacheinander", was sehr unschön aussieht.
Ich glaube, wie und wann ich zeichne, das steht gar nicht mehr zur Diskussion und ich glaube auch nicht, dass es noch besser geht (ich cache alles, ich zeichne nur wenn nötig etc.). Aber g.drawImage ist und bleibt langsam, da kann man nichts dran drehen vermute ich. Deshalb suche ich eben immernoch nach so einer "im Hintergrund"-Zeichnen Möglichkeit, die es aber wohl ohne viel Arbeit nicht einfach so geschenkt gibt.
Eben gerade ist mir jedoch etwas eingefallen. Ich habe ja schon oft gesagt, dass ich g.drawImage verwende. Was ich jedoch nicht erwähnt habe ist, was für eine Signatur ich verwende - nämlich jene, mit der ich das Bild auch "on the fly" auf die Komponentengröße (Buttongröße) skaliere. Nehme ich das weg, sieht man schon einen kleinen Performanceunterschied, noch nicht perfekt, aber spürbar besser. Nun muss ich nur diese Skalierung cachen und dann könnte ich schon nen Schritt weiter sein.