Java 什么是JPanel/Graphics方法组件?
所以我正在尝试学习Java图形,这段代码让我感到困惑。我不明白这里有几件事:Java 什么是JPanel/Graphics方法组件?,java,swing,inheritance,graphics,Java,Swing,Inheritance,Graphics,所以我正在尝试学习Java图形,这段代码让我感到困惑。我不明白这里有几件事: 为什么paintComponenet两次用于方法名和as 我们从super(JPanel)调用一个方法 什么是图形g,它不只是对象的参考变量吗 因为我们没有将它设置为=newgraphics() 为什么我的类中的方法名必须是paintComponent 从JPanel或super调用方法paintComponent 我的类paintComponent中的方法采用 图形对象,但paintComponent什么时候调用 图
paintComponenet
两次用于方法名和as
我们从super(JPanel
)调用一个方法图形g
,它不只是对象的参考变量吗
因为我们没有将它设置为=newgraphics()代码>
paintComponent
从JPanel
或super调用方法paintComponent
paintComponent
中的方法采用
图形对象,但paintComponent
什么时候调用
图形的参数何时插入
//note this is all in a class that extends JPanel, my JPanel is later placed in
//a JFrame which is run through main
public void paintComponent(Graphics g)
{
int width = getWidth();
int height = getHeight();
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(10, 10, 200, 200);
g.setColor(Color.BLUE);
g.drawRect(10, 10, 200, 200);
}
为什么paintComponenet使用了两次,作为方法的名称,以及我们从super(JPannel)中调用的方法
它不会被“使用”两次。它被重写一次,但您希望调用父(JPanel)类的super方法,以便确保它自己进行内部绘制,包括绘制其子对象和清除屏幕上的任何脏部分
什么是图形g,它不只是图形对象的一个参考变量吗?因为我们没有将它设置为=new Graphics()
这是一个图形参数。您不需要设置它=newgraphics()
,因为JVM会为您这样做。它在需要时在后台调用该方法,并提供参数
为什么我的类中的方法名必须是paintComponent才能从JPannel或super调用方法paintComponent
它必须重写super的方法,以便JVM在绘制GUI时调用正确的方法
我的类paintComponent中的方法接受图形对象的参数,但paintComponent何时被调用,以及何时插入图形的参数
同样,当您的程序想要重新绘制GUI时,例如当您调用repaint()
时,或者当操作系统想要重新绘制窗口时,例如当窗口最小化并恢复时,JVM会调用它
您真的很想阅读图形教程:
- :Swing图形的入门教程
- :Swing图形高级教程
paintComponent
方法是放置所有绘制代码的位置。确实,在绘制时会调用此方法,但绘制实际上是从类继承人的更高层开始的,使用paint
方法(由java.awt.Component定义)。每当需要渲染组件时,绘制子系统都会执行此方法。其签名为:
public void paint(Graphics g)
javax.swing.JComponent扩展了该类,并进一步将paint方法分解为三个单独的方法,这些方法按以下顺序调用:
protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)
API不会阻止您的代码重写paintBorder和paintChildren,但一般来说,您没有理由这样做。出于所有实际目的,paintComponent将是您需要覆盖的唯一方法教程不是他真正想读的吗?:)好的,谢谢,这很有帮助。我需要更多的时间来考虑这一点,但明天我会回到这篇文章并提出一些问题more@AshwinGupta:但是,在您阅读/研究了我在答案末尾链接到的两个教程之前,请不要再问任何问题。@AshwinGupta:另外,如果您还有其他问题,请创建一个新问题。如果你在回答这个问题后再添加更多信息,那么不会有很多人看到它。