为什么油漆不起作用?

时间:2017-02-03 04:38:28

标签: java swing graphics paint paintcomponent

为什么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);
}
}

2 个答案:

答案 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实例。所以油漆将被调用,它将完美地运作。