Originariamente inviato da stirkland
Se io scrivo
public class XXX extends Graphics2D mi da un mega errorone perchè si aspetta che implementi (o meglio scriva le interfacce) di TUTTI i metodi. e questo perchè Graphics2D è astratta!
Semplicemente, perché la maggior parte (non tutti, se vai a vedere il javadoc) dei suoi metodi sono astratti. Non perché la classe Graphics2D è astratta (questo vuol solo dire che non è istanziabile).
Originariamente inviato da stirkland
Graphics2D ha un limite secondo me, cioè il non poter disegnare una Area (che estende Shape) con le "sottoshape" di colori diversi. infatti bisogna settare una volta per tutte il colore scrivendo g.setColor(..).
Allora ho scritto una classe che dovrebbe sostituirmi Area, che contenga il colore di ogni forma ma ora dovrei riscrivere il metodo "draw(shape)" del mio graphics. Per adesso ho scritto una classe Drawer con un campo Graphics2D ma vorrei usare una classe che
estende questa!
Innanzitutto bisogna tenere in considerazione come vengono gestiti i Graphics. Non è il programmatore che di norma istanzia un Graphics/Graphics2D ma è il framework che ne fornisce una implementazione concreta in base al contesto in cui deve essere usato. Un Graphics potrebbe rappresentare il "contesto" relativo ad una finestra a video o ad una immagine off-screen o a una superficie stampabile di una stampante.
Quindi implementare concretamente i metodi di un Graphics richiede appunto la conoscenza completa del contesto in cui dovrà essere usato. E non è quello che devi fare tu. Da quello che dici devi solo aggiungere delle funzionalità, non realizzare un nuovo "contesto".
L'unica cosa, secondo me, che puoi fare è un "wrapper". Una cosa del genere:
codice:
class MyGraphics extends Graphics2D
{
private Graphics2D g;
public MyGraphics (Graphics2D g) { this.g = g; }
public void clearRect(int x, int y, int width, int height) {
g.clearRect(x, y, width, height);
}
... ridefinisci tutti i metodi di Graphics2D in modo che invochino su g ...
... tuoi metodi specifici ...
}