【发布时间】:2013-07-04 04:13:40
【问题描述】:
我在 AWT 上遵循 Java : The complete reference 8th edition (JDK 7) 中的示例,但无法在出现的窗口上显示字符串。大小和标题设置正确并显示窗口。如果我在paint() 方法中的控制台上输出一个字符串,我会看到它实际上被调用了几次,但该字符串没有出现在我的应用程序窗口上。我看不出我在哪里偏离了这个例子;实际上我的代码少了一点(他们添加了一个鼠标监听器和一个按键监听器):\
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Main {
public static void main(String[] args) {
Application app = new Application();
app.setSize(new Dimension(640, 480));
app.setTitle("This is a test");
app.setVisible(true);
}
}
class MyWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
class Application extends Frame {
public Application() {
addWindowListener(new MyWindowAdapter());
}
public void paint(Graphics g) {
System.out.println("Hey hey !");
g.drawString("Test", 10, 10);
}
}
【问题讨论】:
-
@MadProgrammer 我没有看到 setVisible xD 应该调用 super.paint()
-
@nachokk +1 for
super.paint()...但真正的问题是为什么要使用 AWT? -
为什么选择 AWT 而不是 Swing?请参阅Swing extras over AWT 上的此答案,因为有很多放弃使用 AWT 组件的充分理由。如果您需要支持较旧的基于 AWT 的 API,请参阅 Mixing Heavyweight and Lightweight Components。
-
老实说,我学习 AWT 只是因为它是本书的下一章。 Swing 将在几章后介绍。书上说学习 AWT 很好,因为 Swing 是在它之上构建的。
-
“这本书说学习 AWT 很好,因为 Swing 是在它之上构建的。” 这本书具有误导性。 AWT 的“非组件”部分在 Swing 中广泛使用。 OTOH,您永远不必使用 AWT 组件,并且鉴于它们的用途不同,它只会使事情变得混乱。提示:添加@MadProgrammer(或重要的
@)以通知他们有新评论。