我已尝试使用此代码绘制一条线,但效果很好。
import java.awt.*;
import javax.swing.*;
public class New extends JFrame {
public New() {
setSize(960, 960);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
g.drawLine(0, 480, 960, 480);
}
public static void main(String[] args) {
New n = new New();
}
}
我还尝试使用以下代码绘制一条线,但框架中没有显示任何线条。
import java.awt.*;
import javax.swing.*;
public class Test {
public Test() {
JFrame f = new JFrame("Test");
f.setSize(960, 960);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public void paint(Graphics g) {
g.drawLine(0, 480, 960, 480);
}
public static void main(String []args) {
Test t = new Test();
}
}
我认为这两个片段没有区别。我错了吗?有什么区别,它是什么?
答案 0 :(得分:2)
JFrame
在构造函数中声明,这意味着它将在Test
创建后删除。此外,paint
方法不属于JFrame
,但属于Test
。所以它不会被称为。
答案 1 :(得分:1)
这是因为永远不会在第二个代码段中调用方法paint(Graphics)
。
确实在第一个代码段中,您使您的类扩展JFrame
这是Container
的子类,它提供此方法,以便您覆盖内部调用的方法paint(Graphics)
当窗口显示时。
在第二个代码段中,它永远不会被调用,因此您的行永远不会显示。您应该创建自己的JFrame
实现,在其中覆盖paint
方法,然后在类Test
的构造函数中使用它。
NB: f
不应该是构造函数中的局部变量,它应该是类Test
中的一个字段,以防止很难找到错误。
答案 2 :(得分:0)
在您的第一个代码上继承msinfo32
类的paint()
方法。
在您的第二个代码中,您创建了一个名为JFrame
的方法,但它不是Window#paint(),而是一个新方法。
如果您想要相同的输出,请按如下方式编辑代码:
paint()