2016-06-26 9 views
1

Ich muss eine Klasse XLabel erstellen, die benutzerdefinierte Farbe und Schriftart hätte.Wie überschreibt man Farbe und Schrift für ein JLabel?

Ich brauche alle JLabels die folgende Wirkung haben

JLabelTest.setFont(new Font("Comic Sans MS", Font.BOLD, 20)); 
JLabelTest.setForeground(Color.PINK); 

Dies ist, was habe ich versucht,

public class XLabel extends JLabel { 

    @Override 
    public void setFont(Font f) 
     { 
     super.setFont(new Font("Comic Sans MS", Font.BOLD, 20)); 
     repaint(); 
     } 

    @Override 
    public void setForeground(Color fg) 
     { 
     super.setForeground(Color.PINK); 
     repaint(); 
     }  
} 

Allerdings, wenn ich versuche, es verwenden XLabel test= new XLabel("test") lässt sich nicht kompilieren, weil Konstruktor XLabel (String) undefiniert . Aber es erweitert JLabel, so sollte es alle Konstruktoren erben. Warum nicht? Wie stelle ich eine benutzerdefinierte Farbe und Schriftart ein?

+0

Mögliches Duplikat von [Java Constructor Inheritance] (http://stackoverflow.com/questions/1644317/java-constructor-inheritance) – VGR

Antwort

1

Sie müssen diese Methoden nicht überschreiben. JLabel ist eine abstrakte Klasse, also erbt XLabel diese Methoden automatisch. Entfernen Sie diese Methoden aus der Klasse XLabel, und versuchen Sie, den Vordergrund und die Schriftart im Konstruktor anzugeben.

public class XLabel extends JLabel { 

public XLabel(String text) { 
    super(text); 
    this.setForeground(Color.BLACK); 
    this.setFont(new Font("Comic Sans MS", Font.BOLD, 20)); 
} 

Dann, wenn Sie eine Instanz von XLabel erstellen, werden die Methoden setForeground() und setFont() automatisch aufgerufen. Dies macht jede Instanz von XLabel die Farbe Pink und die Schriftart Comic Sans.

+0

Dies ist genau das, was ich tue. Dies führt jedoch zu doppeltem Code. wenn ich Hunderte von diesen 'JLabel' Elementen und' setFont' und 'setForeground' für jedes habe. –

+0

Ahh. Sie haben nicht angegeben, dass Sie mehrere JLabels mit genau diesen Eigenschaften in der Frage benötigen. Sie erstellen einfach einen Konstruktor für 'XLabel', der die Schriftart und den Vordergrund festlegt. Ich werde meine Antwort mit dem richtigen Code aktualisieren. –

+0

Vielen Dank für das Update. Das habe ich auch versucht. Dieser Konstruktor eignet sich nur, wenn wir ohne Argumente instanziieren. Es funktioniert nicht, wenn ich 'XLabel test = new XLabel (" test ")' verwende, weil der Konstruktor 'XLabel (String) nicht definiert ist ' –

Verwandte Themen