我使用的是VisualStudioCode2020,它给了我一个错误“类型frame的setdefaultcloseoperation(int)方法未定义”
问题是52号线,
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);
}
}
}
我试过寻找答案,但没有一个是有效的。
我是个笨蛋,几天前学了 java 语。我真的不太懂,但我现在正在努力学习图形是如何工作的
2条答案
按热度按时间tf7tbtn21#
你的标签上说你在问一个jframe,它有
setDefaultCloseOperation(...)
方法。但是,您的代码正在使用
Frame
它是awt组件,不是swing组件。使用JFrame
为了秋千。另外,你们班正在扩展
Canvas
. 对于swing应用程序,您应该扩展JPanel
和覆盖paintComponent()
.如果可以使用swing,就不需要使用awt组件。
我现在正在努力学习图形是如何工作的
首先,您不应该在绘制方法中创建组件。一种绘画方法只能用图形对象来作画。
阅读swing教程中有关自定义绘制的部分,以获得开始使用的工作示例。
按照教程中的示例来获得结构正确的代码。你贴在这里的代码大部分是错的。
dvtswwa32#
这个错误意味着
setDefaultCloseOperation(int)
找不到作为对象的方法的frame
. 这可能是因为frame对象中没有具有该名称的方法,或者如果有这样一个方法,则没有一个方法接受单个int参数。在此处查找frame和jframe的api:https://docs.oracle.com/javase/7/docs/api/java/awt/frame.htmlhttpshttp://docs.oracle.com/javase/7/docs/api/javax/swing/jframe.html
setdeaultcloseoperation似乎是为jframe对象而不是frame对象定义的。jframe扩展了frame,意思是它是一种特定的frame。具体来说,它是一个具有
setDefaultOperation()
方法。或许可以将帧定义更改为
Frame frame = new JFrame();
或者JFrame frame = new JFrame();