Расширение класса Graphics2D без реализации всех методов

У меня есть класс с именем MyClass, и я хочу, чтобы этот класс расширял Graphics2D (в java.awt). Однако, когда я набираю public class MyClass extends Graphics2D { .... }, мне приходится добавлять нереализованные методы draw, drawImage, addRenderingHints и т. д., потому что Eclipse показывает эту ошибку и не компилируется.

Вот тут-то мне и приходит на ум вопрос: я просто хочу использовать draw, setBackground и другие несколько методов Graphics2D, я не хочу, чтобы остальной код с другими нереализованными методами, которые являются обязательными.

Есть ли способ избежать этого? Потому что я чрезвычайно чист и прост, когда дело доходит до кода, и мне не нужны еще 100 строк кода, которые я даже не использую.

Каковы ваши предложения?


person Emir    schedule 14.07.2011    source источник


Ответы (2)


Вы можете расширить Graphics, и всякий раз, когда вам понадобится Graphics2D, просто приведите его.

Graphics g = this.create(); Graphics2D g2d = (Graphics2D) g;

Однако вам нужно будет создать переменную Graphics внутри, так как вы не можете использовать this.

Итак, для «setBackground»:

public void setBackground(Image img) {
    g2d.setBackground(img);
}

На самом деле, что бы вы ни делали, это будет грязно. Я даже не уверен, что вы можете сделать this.create() без каких-либо плохих вещей, так что имейте это в виду.

person Jake Roussel    schedule 14.07.2011
comment
Спасибо за предложение, но сам класс Graphics тоже имеет множество ненужных (для меня) методов. Если я расширяю Graphics, я должен включать эти методы. Верно? - person Emir; 15.07.2011
comment
Ага, к сожалению. Вам будет лучше с каким-то вспомогательным классом, который принимает Graphics2D в своем конструкторе, а затем вызывает методы из него. Что-то вроде: GraphicsHelper gh = new GraphicsHelper(g2d); gh.doStuff(); - person Jake Roussel; 15.07.2011
comment
Можете ли вы посмотреть мой комментарий для первого ответа, пожалуйста? Что вы думаете об использовании Line2D или вы знаете какой-то общий класс, который позволяет рисовать линию и строку одновременно? - person Emir; 15.07.2011
comment
Я не знаю ни одного класса, работающего только с линиями и строками. Опять же, я бы попытался избежать расширения графических классов. - person Jake Roussel; 15.07.2011

См. http://download.oracle.com/javase/6/docs/api/java/awt/Graphics2D.html

Graphics2D — это абстрактный класс, многие методы не являются абстрактными, и все они должны быть определены, чтобы получить подкласс, экземпляр которого можно создать.

Если вы хотите попробовать, вы можете попробовать расширить какой-нибудь класс, реализующий Graphics2D. Но тогда, если вы не будете осторожны, вы рискуете тем, что ваша реализация нужных вам методов может не соответствовать методам, которые вы не переопределяете...

person SJuan76    schedule 14.07.2011
comment
Ладно, я убегаю от Graphics2D. Не могли бы вы предложить класс AWT для рисования линии + строки? Редактировать: я знаю, что java.awt.geom.Line2D хорош для линий, но как насчет линии+строки? - person Emir; 15.07.2011
comment
Вот хороший пример: вы переопределяете метод paint(Graphics) из контейнера daniweb. com/software-development/java/threads/141804 - person SJuan76; 15.07.2011