2016-10-09 7 views
2

Мне нужно расширить класс Graphics до @Override некоторыми методами, включая drawRect(int,int,int,int) и drawRoundRect(int,int,int,int,int,int). Однако я понятия не имею, как это сделать. Это то, что я получил до сих пор:Расширение класса Graphics в Java

public class myGraphics extends Graphics { 
     @Override 
     public void drawRect(int x, int y, int width, int height) { 
      super.fillRect(x, y, width, height); 
      setColor(Color.WHITE); 
      super.fillRect(x, y, width-6, height-6); 
     } 

     @Override 
     public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { 
      super.fillRoundRect(x, y, width, height, arcWidth, arcHeight); 
      setColor(Color.WHITE); 
      super.fillRoundRect(x, y, width-6, height-6, arcWidth, arcHeight); 
     } 
    } 

Я получаю сообщение об ошибке на объявлении класса линии говоря: myGraphics is not abstract and does not override abstract method dispose() in java.awt.Graphics я получаю сообщение об ошибке на каждой строке, в которой super.fill..(..) упоминается говоря: abstract method fill..(..) in java.awt.Graphics cannot be accessed directly. У кого-нибудь есть идея, что я могу сделать?

ответ

1

Класс Graphics является абстрактным, то есть вы не можете создать объект из него. Это не значит, что вы не можете расширять его, но это означает, что один из двух должен произойти:

Если вы его расширите, вы должны явно переопределить (на самом деле написать все методы) все его методы. другой вариант делает ваш класс myGraphics абстрактным, но я не думаю, что это то, что вы хотели.

Надеюсь, это поможет.

2

Этот вопрос:

мне нужно расширить класс Graphics, чтобы @Override некоторые методы, включая DrawRect (интермедиат, Int, Int, Int) и drawRoundRect (Int, Int, Int, Int, Int , INT).

... на самом деле может быть XY Problem, где вы спрашиваете, как решить конкретную проблему с кодом, когда лучшим решением является использование совершенно другого подхода. Лучше, чтобы вы рассказали нам общую проблему, которую вы пытаетесь решить, а не то, как вы в настоящее время пытаетесь ее решить:

Если вы хотите изменить поведение чертежа вашей собственной графической программы, есть лучшие способы, чем в попытке расширить Graphics, очень сложная задача, если вам действительно нужно это предпринять. Вместо этого рассмотрите использование класса, который расширяет JPanel, и дайте ему собственные методы drawRect и drawRoundRect, но также добавьте к нему параметр Graphics или Graphics2D, и в рамках этих методов сделайте все изменения.