Button ignoriert disable?

xyss

Aktives Mitglied
Moin,

in meinem aktuellen Projekt habe ich auf einem Panel mehrere Buttons (mit eigenen Bildern). In diesem Fall geht es um das Panel "Menu" und das Panel "Optionen". Wenn ich bei dem Panel "Menu" auf den Button klicke, erscheint das "Optionen" Panel. Dabei wird das Menu panel disabled. Der Button im Panel "Menu" besitzt ein Rollover-Bild. Das Problem ist nun, wenn dann von dem Menu Panel zu dem Optionen Panel gewechselt wird, ist der Button noch immer sichtbar, und Rollover sowie Button-Click funktionieren ebenfalls noch. (Genauer genommen wird der Button erst sichtbar, sobald man einmal mit der Maus drüber geht). Da das Menu-Panel disabled ist, irritiert mich das ein wenig...
Desweiteren ist es dem Button auch scheinbar recht "egal", wenn ich ihn ebenfalls disable, denn auch dann funktioniert noch alles.
Sogar wenn ich "button = null" verwende, bleibt er auf dem nächsten Panel sichtbar...

Edit:
Also wenn ich den button explizit vom Panel entferne (mit panel.remove(btn) ) funktioniert es. Trotzdem würde mich mal interessieren, wieso der Button so "hartnäckig" ist.
 
Zuletzt bearbeitet:
Direkt noch eine weitere Frage:
Ich habe die Buttons in einem Panel welches ich selbst (aktiv) zeichne. Aus diesem Grund musste ich auch das Zeichnen der Buttons mit einbeziehen. Das habe ich so gemacht:
Java:
if (buttonLevel.getModel().isRollover())
					buttonLevel.getRolloverIcon().paintIcon(buttonLevel, g2d, (int) buttonLevel.getLocation().getX() , (int) buttonLevel.getLocation().getY());
				else
					buttonLevel.getIcon().paintIcon(buttonLevel, g2d, (int) buttonLevel.getLocation().getX() , (int) buttonLevel.getLocation().getY());

Nun ist das Problem, dass der Button beim Rollover manchmal flackert, also, dass es ganz kurz weiß aufflackert. Double-Buffering verwende ich bereits.
 
Zuletzt bearbeitet:
button = null behandelt nur diese eine Referenz und nicht den Button.
versuch mal button.setEnabled(false);

Warum hast du deinen Code so gruselig formatiert? Da stellen sich bei mir und auch bei jedem Anderen die Nackenhaare auf.
Woran das mit dem Rollover liegen könnte, weiß ich nicht.
 
@jgh Ich habe eine eigene Methode, draw, welche ich aufrufe.

@Gucky
Wieso mein Code hier so strange dargestellt wurde, ist fraglich... auf jeden Fall sieht es in Eclipse nicht so grausam aus 😀
Das mit setEnabled(false) zeigt Wirkung.. ich dachte, disable() würde den gleichen Effekt erzielen, aber dem ist scheinbar nicht so.
 
Doch ist es.. ich hatte jedoch völlig vergessen, dass es setEnabled() gibt.. 😳

Edit:
Hatte mich geirrt, jetzt weiß ich woher das Flackern der Buttons kommt! Die Icons die ich für die Buttons benutze, stammen aus .png Dateien, welche Transparenz enthalten. Die Transparenz macht scheinbar Probleme 😱 Habe nämlich nun mal den Hintergrund der Icons auf schwarz geändert, damit ging es besser. Zwischen dem Zeichnen der Icons ist also kurz das "eigentliche Aussehen" des Buttons zu sehen.


Edit2:
So definiere ich die Buttons:
Java:
ImageIcon myImage = new ImageIcon(getClass().getResource(s);
	JButton b = new JButton(myImage);
	b.setRolloverEnabled(true);
	b.setRolloverIcon(new ImageIcon(getClass().getResource(s2)));
	b.setLocation(x,y);
	b.setSize(myImage.getIconWidth(), myImage.getIconHeight());
	b.setBorderPainted(false);

Wenn ich
button.setOpaque(false);
button.setContentAreaFilled(false);
hinzufüge, flackert es sogar bei den Buttons ohne Transparenten Hintergrund...
 
Zuletzt bearbeitet:
Das mit den Buttons war mir nun auf dauer zu blöd, nach dem ich so ziemlich alles versucht habe, was mir auch nur im entferntesten in den Sinn kam. Benutze nun statt den Buttons JPanel entsprechender Größe, habe einen MouseMotionListener und einen MouseListener draufgepackt, und je nachdem ob die Maus in dem Bereich ist, wird ein anderes Bild gepainted. Dazu noch die mousePress()-Methode überschreiben und fertig ist.. das Zeichnen habe ich auch hier mit einer eigenen Methode übernommen, die ich dann von dem "Hauptpanel" aus aufrufe, und damit läuft es absolut flacker-frei.

Danke euch natürlich trotzdem für eure Hilfe, und immerhin klappt das mit den Panel-Wechseln ja nun dank euch auch 😛

lg
 
Zuletzt bearbeitet:

Zurück
Oben