public class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g){
Graphics2D gd2 = (Graphics2D) g;
GradientPaint gradient = new GradientPaint(70,70,Color.blue,150,150,Color.red);
}
}
为什么这有效但不是这样:
public class MyDrawPanel extends JPanel {
public void paintComponent(Graphics2D g){
GradientPaint gradient = new GradientPaint(70,70,Color.blue,150,150,Color.red);
g.setPaint(gradient);
g.fillOval(70,70,100,100);
}
}
第一个呈现,但第二个呈现除帧之外的任何图形。我注意到paintComponent()需要一个Graphics对象,但如果Graphics2D是Graphics对象的子类,为什么我不能调用Graphics的子类?
是否有一些概念我不知道为什么会这样?
答案 0 :(得分:2)
它说你应该这样实现它,因为Graphics2D是Graphics,而Graphics不是Graphics2D。
如果您发现施法令人不安,您可以随时创建自己的内容。扩展JPanel的MyJPanel,定义您自己的方法,并在将来对其进行子类化,覆盖您定义的方法。
public class MyJPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
paintComponent((Graphics2D) g);
}
protected void paintComponent(Graphics2D g) {
}
}
答案 1 :(得分:1)
基本上,当你覆盖一个方法时,你可以同等或不那么具体。
想一想:
JPanel p = new MyPanel();
p.paintComponent(someGraphicsInstance);
对JPanel
的引用应该能够接受Graphics引用作为paintComponent
方法的参数。但是,您的方法违反了该要求,因为它不接受Graphics
个实例,只接受Graphics2D
。
有关此内容的更多信息,请访问https://stackoverflow.com/a/9950538/567864