# JButton setPressedIcon funktioniert nicht



## ForenDaddy (13. Mai 2011)

ich habe ein paar jbuttons mit einem icon versehen.
der button selber ist unsichtbar per:


```
button.setContentAreaFilled( false );
button.setBorderPainted( false );
```
aber wenn ich auf den button drücke, wird, solange ich gedrückt halte, alles was hinter dem icon liegt sichtbar.
also icon ist weg, button ist wieder sichtbar mit dem jeweiligen text.

ich habe also versucht mit:

```
button.setPressedIcon( neuesIcon );
```
das zu unterbinden.
klappt leider überhaupt nicht. setselectedicon hat auch nichts gebracht.

ich verwende zur zeit kein l&F.

woran kann das liegen?


----------



## L-ectron-X (13. Mai 2011)

Was ist dein Ziel? Was möchtest du eigentlich erreichen?
Vielleicht gibt es einen besseren Weg zu einer Lösung.


----------



## ForenDaddy (16. Mai 2011)

ich möchte ein icon haben, das wie ein button funktioniert.
daher habe ich mir einen button mit einem icon gebastelt und habe den button unsichtbar gemacht.

dabei soll der button natürlich zu jedem zeitpunkt, immer die icon optik haben.
egal ob ich klicke (button wird etwas kleiner) oder der button nicht klickbar sein soll (grau).

die umsetzung ist mir natürlich egal. dachte nur, so wie ich es jetzt habe, wäre es am leichtesten.


----------



## MiDniGG (16. Mai 2011)

Wenn ich mich nicht irre, könntest Du statt eines JButtons auch ein JLabel nutzen und dem einen ActionListener hinzufügen. Im JLabel kannst Du dann auch das Icon setzen. Dann musst Du schon nichts unsichtbar oder so machen.


----------



## Gast2 (16. Mai 2011)

MiDniGG hat gesagt.:


> Wenn ich mich nicht irre, könntest Du statt eines JButtons auch ein JLabel nutzen und dem einen ActionListener hinzufügen. Im JLabel kannst Du dann auch das Icon setzen. Dann musst Du schon nichts unsichtbar oder so machen.



JLabel hat keinen ActionListener, wenn dann musst du einen MouseListener adden =)


----------



## MiDniGG (16. Mai 2011)

Mist. Also doch geirrt. :-D
Aber der MouseListener reicht ja auch.  Zumal man nur den Klick und nicht eine genaue Position auslesen muss.


----------



## Gast2 (16. Mai 2011)

MiDniGG hat gesagt.:


> Mist. Also doch geirrt. :-D
> Aber der MouseListener reicht ja auch.  Zumal man nur den Klick und nicht eine genaue Position auslesen muss.



Ja wenn man sonst eh keine States vom JButton braucht reicht ein JLabel voll und ganz.


----------



## ForenDaddy (17. Mai 2011)

wie ist das dann, wenn ich den button drücke.
kann das der listener unterscheiden?
also dass ich bei gedrücktem "button/label" ein anderes bild setzen kann, damit man das gefühl des drückens visuell angezeigt bekommt.


----------



## Gast2 (17. Mai 2011)

ForenDaddy hat gesagt.:


> wie ist das dann, wenn ich den button drücke.
> kann das der listener unterscheiden?
> also dass ich bei gedrücktem "button/label" ein anderes bild setzen kann, damit man das gefühl des drückens visuell angezeigt bekommt.



Nein dann brauchst du einen JButton, habe ich ja angedeutet kommt drauf an ob du die Button States brauchst.

Mit button.getModel bekommst du alle States heraus und je nachdem kannst du dann deine Bilder setzen(hover,press) usw.


----------



## ForenDaddy (17. Mai 2011)

ich habe da so eine vermutung.
ich habe mir fuer die ganze aktion einen eigenen buttonrenderer und buttonlistener gebaut.
kann es sein, dass ich durch das überschreiben mir die setPressedIcon() methode versaut habe?


----------



## Gast2 (17. Mai 2011)

ForenDaddy hat gesagt.:


> ich habe da so eine vermutung.
> ich habe mir fuer die ganze aktion einen eigenen buttonrenderer und buttonlistener gebaut.
> kann es sein, dass ich durch das überschreiben mir die setPressedIcon() methode versaut habe?



Bist du dir auch sicher dass du dein Bild richtig lädst und einbindest?


----------



## Spin (17. Mai 2011)

setPressedIcon erwartet eine Datei die auf .png oder .jpg oder .gif endet.

sonst see Sir Wayne.

Die setPressed kannst du nicht überschrieben haben, wenn du keine Methode hast die genau so heißt ^^ und keinen Override hat !!.

Um ein Bild zuwcheseln brauchst du definitiv keinen Listener ( eigenen).


```
jButton1 = new JButton();
		jButton1.setIcon(this.manager.getImageIcon("roundInactive"));
		jButton1.setRolloverIcon(this.manager.getImageIcon("roundActive"));
		jButton1.setPressedIcon(this.manager.getImageIcon("roundActive"));
```

Ich habe mir einen Manager geschrieben der die Bilder lädt.!!! Richtiger pfad und alles klappt!


----------



## Ebenius (18. Mai 2011)

Ich muss mal gleich noch eine Beschwerde los werden, weil ich sowas öfter lese:


MiDniGG hat gesagt.:


> Aber der MouseListener reicht ja auch.  Zumal man nur den Klick und nicht eine genaue Position auslesen muss.


Ein MouseListener reicht eigentlich nie. Man müsste noch setFocusable(true) setzen, hätte kein Focus-Feedback, müsste einen KeyListener anhängen, damit man auch mit SPC den Button drücken kann. Ganz zu schweigen von Accessibility-Support.

Ebenius


----------

