在 Java 中扩展图形 class
Extending the Graphics class in Java
我需要扩展图形 class 以便 @Override
一些方法,包括 drawRect(int,int,int,int)
和 drawRoundRect(int,int,int,int,int,int)
。
但是,我不知道该怎么做。这是我到目前为止得到的:
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);
}
}
我在 class 声明行上收到一条错误消息: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
。
有人知道我能做什么吗?
图形 class 是抽象的,这意味着您不能从中创建对象。
这并不意味着您不能扩展它,但它确实意味着必须发生以下两种情况之一:
如果你扩展它,你必须明确地覆盖(实际上写所有的方法)它的所有方法。
另一种选择是使您的 myGraphics class 抽象化,但我认为这不是您想要的。
希望对您有所帮助。
本期:
I need to extend the Graphics class in order to @Override some methods including drawRect(int,int,int,int) and drawRoundRect(int,int,int,int,int,int).
...实际上可能是 XY Problem,您在其中询问如何解决特定代码问题,而最佳解决方案是使用完全不同的方法。最好告诉我们您正在尝试解决的总体问题,而不是您目前正在尝试解决的问题:
如果你想改变你自己的图形程序的绘图行为,有比尝试扩展 Graphics 更好的方法,如果你真的必须承担它,这是一项非常困难的任务。相反,考虑使用扩展 JPanel 的 class,并为其提供自己的 drawRect 和 drawRoundRect 方法,同时向其添加 Graphics 或 Graphics2D 参数,并在这些方法中进行所需的任何更改。
作为抽象class,Graphics有一堆抽象方法。抽象方法是未在抽象 class 中定义但必须在最终子 class 中定义的方法。如果您不想立即定义抽象方法,则可以将 subclass 设为抽象 class,但如果您希望能够实例化 class,您最终将拥有定义方法。由于 dispose() 是一种抽象方法,您需要在子 class 中说明 dispose() 应该做什么,否则会欺骗计算机认为您是通过在 {} 之间不留任何内容来告诉 dispose 要做什么。
我有一个类似的问题,我通过制作 class SimpleGraphics 解决了它。如果您使 myGraphics class extend SimpleGraphics.
可能会解决您的问题
import java.awt.*;
import javax.swing.JFrame;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
public class SimpleGraphics extends Graphics{
public void clearRect(int x, int y, int width, int height){};
public void clipRect(int x, int y, int width, int height){};
public void copyArea(int x, int y, int width, int height, int dx, int dy){};
public void dispose(){};
public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle){};
public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer){return false;};
public boolean drawImage(Image img, int x, int y, ImageObserver observer){return false;};
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer){return false;};
public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer){return false;};
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer){return false;};
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer){return false;};
public void drawLine(int x1, int y1, int x2, int y2){};
public void drawOval(int x, int y, int width, int height){};
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints){};
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints){};
public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight){};
public void drawString(AttributedCharacterIterator iterator, int x, int y){};
public void drawString(String str, int x, int y){};
public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle){};
public void fillOval(int x, int y, int width, int height){};
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints){};
public void fillRect(int x, int y, int width, int height){};
public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight){};
public Shape getClip(){return null;};
public Rectangle getClipBounds(){return null;};
public Color getColor(){return null;};
public Font getFont(){return null;};
public FontMetrics getFontMetrics(Font f){return null;};
public void setClip(int x, int y, int width, int height){};
public void setClip(Shape clip){};
public void setColor(Color c){};
public void setFont(Font font){};
public void setPaintMode(){};
public void setXORMode(Color c1){};
public void translate(int x, int y){};
public Graphics create(){return null;};
}
我需要扩展图形 class 以便 @Override
一些方法,包括 drawRect(int,int,int,int)
和 drawRoundRect(int,int,int,int,int,int)
。
但是,我不知道该怎么做。这是我到目前为止得到的:
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);
}
}
我在 class 声明行上收到一条错误消息: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
。
有人知道我能做什么吗?
图形 class 是抽象的,这意味着您不能从中创建对象。 这并不意味着您不能扩展它,但它确实意味着必须发生以下两种情况之一:
如果你扩展它,你必须明确地覆盖(实际上写所有的方法)它的所有方法。 另一种选择是使您的 myGraphics class 抽象化,但我认为这不是您想要的。
希望对您有所帮助。
本期:
I need to extend the Graphics class in order to @Override some methods including drawRect(int,int,int,int) and drawRoundRect(int,int,int,int,int,int).
...实际上可能是 XY Problem,您在其中询问如何解决特定代码问题,而最佳解决方案是使用完全不同的方法。最好告诉我们您正在尝试解决的总体问题,而不是您目前正在尝试解决的问题:
如果你想改变你自己的图形程序的绘图行为,有比尝试扩展 Graphics 更好的方法,如果你真的必须承担它,这是一项非常困难的任务。相反,考虑使用扩展 JPanel 的 class,并为其提供自己的 drawRect 和 drawRoundRect 方法,同时向其添加 Graphics 或 Graphics2D 参数,并在这些方法中进行所需的任何更改。
作为抽象class,Graphics有一堆抽象方法。抽象方法是未在抽象 class 中定义但必须在最终子 class 中定义的方法。如果您不想立即定义抽象方法,则可以将 subclass 设为抽象 class,但如果您希望能够实例化 class,您最终将拥有定义方法。由于 dispose() 是一种抽象方法,您需要在子 class 中说明 dispose() 应该做什么,否则会欺骗计算机认为您是通过在 {} 之间不留任何内容来告诉 dispose 要做什么。
我有一个类似的问题,我通过制作 class SimpleGraphics 解决了它。如果您使 myGraphics class extend SimpleGraphics.
可能会解决您的问题import java.awt.*;
import javax.swing.JFrame;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
public class SimpleGraphics extends Graphics{
public void clearRect(int x, int y, int width, int height){};
public void clipRect(int x, int y, int width, int height){};
public void copyArea(int x, int y, int width, int height, int dx, int dy){};
public void dispose(){};
public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle){};
public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer){return false;};
public boolean drawImage(Image img, int x, int y, ImageObserver observer){return false;};
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer){return false;};
public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer){return false;};
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer){return false;};
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer){return false;};
public void drawLine(int x1, int y1, int x2, int y2){};
public void drawOval(int x, int y, int width, int height){};
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints){};
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints){};
public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight){};
public void drawString(AttributedCharacterIterator iterator, int x, int y){};
public void drawString(String str, int x, int y){};
public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle){};
public void fillOval(int x, int y, int width, int height){};
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints){};
public void fillRect(int x, int y, int width, int height){};
public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight){};
public Shape getClip(){return null;};
public Rectangle getClipBounds(){return null;};
public Color getColor(){return null;};
public Font getFont(){return null;};
public FontMetrics getFontMetrics(Font f){return null;};
public void setClip(int x, int y, int width, int height){};
public void setClip(Shape clip){};
public void setColor(Color c){};
public void setFont(Font font){};
public void setPaintMode(){};
public void setXORMode(Color c1){};
public void translate(int x, int y){};
public Graphics create(){return null;};
}