public class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g){
Graphics2D gd2 = (Graphics2D) g;
GradientPaint gradient = new GradientPaint(70,70,Color.blue,150,150,Color.red);
}
}
Warum diese gültig ist, aber nicht so:Warum kann paintComponent kein Graphics2D-Objekt akzeptieren?
public class MyDrawPanel extends JPanel {
public void paintComponent(Graphics2D g){
GradientPaint gradient = new GradientPaint(70,70,Color.blue,150,150,Color.red);
g.setPaint(gradient);
g.fillOval(70,70,100,100);
}
}
Zuerst eine macht, aber die zweite macht keine andere Grafiken als der Rahmen. Ich habe bemerkt, dass paintComponent() ein Graphics-Objekt benötigt, aber wenn Graphics2D eine Unterklasse des Graphics-Objekts ist, warum kann ich dann keine Unterklasse von Graphics aufrufen?
Gibt es ein Konzept, das ich nicht verstehe, warum das ist?
Die kurze Antwort zu finden ist, weil es spezifischer als ein Graphics ist und somit keine gültige Überschreibung des Verfahrens. Es kann gleich oder weniger spezifisch, aber nicht spezifischer sein. – Corbin
Es ist keine gültige Überschreibung von paintComponent, die JPanel als (Grafik g) auf seiner Methode angegeben hat? –
Es gab tatsächlich eine Frage, die kürzlich ausführlich darüber gesprochen hat. Sehen Sie sich die Antworten auf http://stackoverflow.com/a/9950538/567864 an. Es sollte erklären, warum Sie gleich oder weniger spezifisch, aber nicht spezifischer sein können, wenn Sie eine Methode überschreiben. – Corbin