Java “错误”;方法setDefaultCloseOperation(int)对于类型Frame“未定义;

Java “错误”;方法setDefaultCloseOperation(int)对于类型Frame“未定义;,java,swing,compiler-errors,jframe,Java,Swing,Compiler Errors,Jframe,我使用的是Visual Studio代码2020,它给了我一个错误“类型框架的方法setDefaultCloseOperation(int)未定义” 问题是52号线 我试着寻找答案,但我发现没有一个有效 我是个书呆子,几天前学过java。我真的不太懂,但我现在正试图了解图形是如何工作的。这个错误意味着setDefaultCloseOperation(int)不能作为对象帧的方法。这可能是因为帧对象中没有具有该名称的方法,或者如果有这样的方法,则没有一个方法接受单个int参数 在此处查找Fra

我使用的是Visual Studio代码2020,它给了我一个错误“类型框架的方法setDefaultCloseOperation(int)未定义”

问题是52号线



我试着寻找答案,但我发现没有一个有效


我是个书呆子,几天前学过java。我真的不太懂,但我现在正试图了解图形是如何工作的。这个错误意味着
setDefaultCloseOperation(int)
不能作为对象
帧的方法。这可能是因为帧对象中没有具有该名称的方法,或者如果有这样的方法,则没有一个方法接受单个int参数

在此处查找Frame和JFrame的API:

setDeaultCloseOperation似乎是为JFrame对象定义的,而不是为Frame定义的。JFrame扩展了Frame,这意味着它是一种特定的框架。具体来说,它是一个具有
setDefaultOperation()
方法的框架

也许可以将框架定义更改为
frame-frame=newjframe()

或者
JFrame=newjframe()

您的标记表示您正在询问JFrame,它确实具有
setDefaultCloseOperation(…)
方法

但是,您的代码使用的是
Frame
,它是AWT组件,而不是Swing组件。使用
JFrame
进行Swing

另外,您的类正在扩展
Canvas
。对于Swing应用程序,您应该扩展
JPanel
并覆盖
paintComponent()

如果可以使用Swing,则无需使用AWT组件

我现在正在努力学习图形是如何工作的

首先,您不应该在绘制方法中创建组件。绘制方法应仅使用图形对象进行绘制

阅读Swing教程中关于工作示例的部分,以开始学习


按照教程中的示例学习正确结构的代码。您在这里发布的代码大部分是错误的。

您希望使用Swing类JFrame,而不是awt类Frame。
        import java.awt.Frame;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import java.awt.Color;

public class Main {

    public static void main(String[] args) {
        
        boolean loop = false;

        /* while (loop = true) {

            try {
                Thread.sleep(2000);
            } catch (InterruptedException reallyIgnored) {}

            System.out.println("Loop is working.");

        } */

    }

static class GraphicsEngine extends Component {

    public void paint(Graphics g) {

        // Creating Graphics Shortcut

        Graphics2D g2d = (Graphics2D)g;

        // Creating new framw window, declaring size

        Frame frame = new Frame();

        frame.add(new GraphicsEngine());

        int frameWidth = 700;

        int frameHeight = 500;

        frame.setSize(frameWidth, frameHeight);

        frame.setLayout(null);

        frame.setLocationRelativeTo(null);

        frame.setResizable(false);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

        frame.pack();

        /* Next part will create dot that moves across screen.
        It will have a loop that draws the dot, and also a loop
        that erases the previous dot. */

        g2d.SetColor(new Color(255, 255, 255));

        g2d.fillRect(0, 0, getSize().height-1, getSize().height-1);

        }

    }

}