为什么paint方法不能以这种方式工作,而是以第二种方式工作?
第一种方式:
public class Ex extends JFrame{
public static void main(String args[]){
JFrame frame=new JFrame("Title");
frame.setVisible(true);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g){
super.paint(g);
g.drawString("HEllo", 500, 500);
}
}
第二种方式:正在工作为什么?
public class Ex extends JFrame{
{
this.setTitle("Title");
this.setSize(800, 600);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new Ex();
}
public void paint(Graphics g){
super.paint(g);
g.drawString("HEllo", 500, 500);
}
}
答案 0 :(得分:3)
如果:
JFrame frame=new JFrame("Title");
而是阅读:
JFrame frame=new Ex(); // we want an Ex, not a JFrame!
frame.setTitle("Title");
它应该有用。
答案 1 :(得分:3)
由于Ex类正在扩展JFrame,因此在Ex Class中覆盖了paint方法。你的实例属于Ex类,所以当你选择方式2时,它会调用Ex类的paint方法。因此它正在工作。
当您使用方式1时,您的引用和实例都是JFrame,因此它将调用超类的paint方法(即JFrame)。如果你想要调用这个Ex类的paint方法,Instance应该只是那个类,在你的情况下是子类。
尝试
JFrame frame=new Ex();
frame.setTitle("Title");
这将引用JFrame和Ex Class实例。所以油漆将被调用,它将完美地运作。