我去了各个论坛,我发现了一个类似于我的问题,但它没有回答我要问的问题。
public class DrawSomething extends JPanel {
public void paintComponent(Graphics g); //how is an object passed in that parameter?
super.paintComponent(g); //I don't get how that works
this.setBackground(Color.white);
同样,我很遗憾上面的代码如何赋予在JPanel上绘制内容的功能。
答案 0 :(得分:1)
public void paintComponent(Graphics g);
上面的代码行应该是您覆盖的方法。所以它不应该以分号结尾。但我会耸耸肩。我会尽量让这个变得简单。在您的程序中,您创建一个JPanel,并将其添加到JFrame。 JFrame将知道您添加了JPanel。编写JFrame的程序员将知道JPanel有一个paintComponent方法,并将调用它并传入Graphics对象。此外,现在它正在调用一个你已经覆盖的方法,它将运行你在那里的任何代码。
super.paintComponent(g);
当你覆盖代码时,你正在删除之前的任何内容并将新代码放入其中。这意味着当你调用super.paintComponent(g)时,所有旧代码都消失了;你基本上是在说,运行旧代码和我的代码。
您应该掌握OOP概念以及对象及其方法彼此交互的方式。了解如何开发应用程序将使您更容易使用其他人的代码。您可以启动here。
答案 1 :(得分:0)
DrawSomething类将定义方法paintComponent。在类DrawSomething的对象上调用paintComponent将执行该方法。您尚未定义方法,但如果您这样做,则会运行该方法的代码。
关键字“super”允许您引用父类的方法,在本例中为JPanel。当你想扩展父方法时,这很有用:让它做同样的事情和额外的事情。请注意,您不能以您的方式直接在类定义中使用它,您必须将它放在方法中。