JButton setBackground() färbt nicht den ganzen Knopf

marcobolten

Mitglied
Hi,
als totaler Neuling in Java (bin einigermaßen erfahren in C++) frage ich das vorsichtshalber hier und nicht im "Swing"-Bereich.

Ich möchte einen komplett blauen JButton, so, wie ich ihn in allen möglichen Beispielen sehe. Stattdessen bekomme ich nur einen blauen Rahmen um meine Buttons (mit setBackground()) und auf ihnen einen blauen Text (setForeground()) hin (siehe Screenshot: das hellblau wäre ein super Ergebnis, das ist aber nur der gerade aktive JButton). Meine Buttons bleiben im Wesentlichen grau.

Mein Code (auf das Wesentliche reduziert, aber nicht kompilierbar):
Java:
import javax.swing.*;//JButton;
import java.awt.Color;

public class AreaButton extends JButton
{
 [...]
    // Konstruktor
    public AreaButton([...])
    {
        super();
[...]
        setContentAreaFilled(true); 
        setOpaque(true);
        setBorder(BorderFactory.createEmptyBorder());
        setForeground (Color.BLUE);
        setBackground (Color.BLUE);
    }
[...]
}

Ich arbeite mit BlueJ auf Win10/64, die Buttons leben in einem frei schwebenden JFrame, den ich aus einer "Stifte Und Mäuse"-Anwendung heraus geöffnet habe.
Meine Vermutung geht dahin, dass hier irgendwelche native styles oder Ähnliches dazwischenfunken, da etwa vier Millionen Posts bei immer wieder die oben stehenden Zeilen vorschlagen und Bilder von vollgefärbten Knöpfen zeigen. Kann ich da etwas ändern?
 

Anhänge

  • javabuttonproblem.png
    javabuttonproblem.png
    9,8 KB · Aufrufe: 3
Setz mal ein setOpaque(true); - bringt das die gewünschte Änderung?
Sorry - hast Du ja schon drin - hab ich leider erst direkt nach dem posten gesehen!
 
Jetzt habe ich doch selbst einmal etwas geschaut - das scheint von Swing so nicht vorgesehen zu sein. Man kann hier aber sowas selbst gestalten. Wie das aussehen könnte, zeigt jemand in folgendem SO Thread:
 
Hi Konrad, hab Dank für Deine Antwort! Das ist eine sehr coole - und flexible - Variante, die werde ich demnächst sicher auch brauchen. Für die jetzige Anwendung habe ich gerade eben begriffen, woran es lag.
Der Trick war die Kombination:
Java:
setContentAreaFilled(false);
setOpaque(true);
setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
Offensichtlich bezieht sich contentArea auf die Style-Oberfläche, opaque hingegen adressiert den gefärbten Hintergrund.

Border brauchte ich noch, um die Buttons grafisch voneinander zu trennen. Jetzt ist es, wie es soll (siehe Anhang).

Danke!
 

Anhänge

  • javabuttonproblem2.png
    javabuttonproblem2.png
    10,5 KB · Aufrufe: 0

Zurück
Oben