Java JRadioButton mit Icon statt Text

r@b!ttbr@!n

Cadet 3rd Year
Registriert
Dez. 2007
Beiträge
39
Moin,

ich habe folgendes Problem. Ich möchte einen JRadioButton erstellen mit einem Icon anstelle
des Textes. Wenn ich aber den Konstruktor JRadioButton(Icon icon) nehme, dann ersetzt er
mir den Kreis. Ich will aber den Kreis und dahinter das Icon.

Weiß jemand wie ich das realisieren kann?

mfg
 
Wieso lässt du nicht einfach den Text weg und setzt dann das icon einzeln dahinter?
 
Weil ich dann nichtmehr auf das Icon drücken kann, um den RadioButton auszuwählen.
 
Du müsstest die Methode paintComponent(Graphics g) des JRadioButton in einer abgeleiteten Klasse so überschreiben, dass das Icon statt der Beschriftung gezeichnet wird.
 
Zuletzt bearbeitet:
Und das geht wie?
Also eine abgeleitete Klasse erstellen und die Methode überschreiben ist kein Problem, aber was muss ich in die Methode reinschreiben?

Und ist das wirklich der einzige Weg oder gibt es noch andere?

Edit: Also ich will jetzt keine fertige Methode, sondern eine Erklärung, damit ich das dann selber machen kann, wäre mir viel lieber.
 
Zuletzt bearbeitet:
rbicondono.png


So hast du dir das vorgestellt oder? Ich glaube Shagg hat das auch so gemeint wie ich das gemacht habe. Du bastelst dir einfach ein Objekt welches von JPanel erbt. Das ist sozusagen die Zeichenfläche für dein Icon. Dieses Objekt hat (has-a, Komposition) ein Radiobutton Objekt, welches im Konstruktor initialisiert und hinzugefügt wird.

Die paint() von diesem JPanel-Objekt überschreibst du dann so ähnlich:
Code:
    @Override
    public void paint(Graphics g)
    {
        g.drawImage(icon, 0, 0, null);
        super.paint(g);
    }
wodurch dein Icon gezeichnet wird und dann der Radiobutton draufgeklatscht wird.

Edit: Habe gerade gesehen, dir geht es darum draufklicken zu können. Dann müsstest du wohl die paint() eines Radiobuttons selbst überschreiben, wie auch schon erwähnt wurde. Das geht im Prinzip genau so wie in meinem Beispiel.
 
Zuletzt bearbeitet:
Nein, stimmt nicht ganz.
Ich hab mir das so vorgestellt:

normal ist ja
o Text

und ich will
o Icon

also nebeneinander und nicht ineinander, aber ich hab heute Abend auch keine Zeit mehr. Ich werd mir das morgen nochmal genau anschauen, was du da geschrieben hast. Vllt hilft es mir ja trotzdem.
 
Ah okay. Auch kein Problem.

nexttoicle.jpg


Verhält sich genau wie du es willst. Du kannst also auf das Icon klicken, um den Button zu aktivieren.

Code:
public class IconRadioButton extends JRadioButton
{
    private final Image icon;
    
    public IconRadioButton()
    {
        icon = Toolkit.getDefaultToolkit().createImage("data/smiley.png");
        try    {Thread.sleep(500);} catch (InterruptedException e)    {e.printStackTrace();}
        setSize(100, 50);
        setOpaque(false);
    }
    
    @Override
    public void paint(Graphics g)
    {
        g.drawImage(icon, 30, 0, 50, 50, null);
        super.paint(g);
    }
}
 
So.
Vielen Danke. Ich habs noch ein bischen abgeändert, aber jetzt ist es genau so, wie ich das haben wollte.

Jetzt hab ich nur noch eine letzte Frage.
Wofür brauche ich diese Zeile bzw. welche Funktion hat sie?
Code:
       try    {Thread.sleep(500);} catch (InterruptedException e)    {e.printStackTrace();}
 
Sehr unsaubere Methode, um sicher zu stellen, dass das Bild geladen ist. Die Methode blockiert nämlich den aufrufenden Thread nicht.
Lieber mit ImageIO arbeiten, die blockiert...
 
Das war nur um ein bisschen zu warten, bis das Image geladen ist.

Edit: Da war Killkrog wohl schneller. :D
 
kann man nicht einfach wie schon gesagt den text weglassen, dass icon stattdessen hintendran setzen und im onclick-ereignis den radiobutton checken?
 
Zurück
Oben