【发布时间】:2013-01-04 04:37:28
【问题描述】:
2013 年 2 月 2 日编辑
在你的一些答案和我找到的一个简单的 Swing 应用程序指南的帮助下,我能够取得一点进步,我现在把它全部放在一个类中。但是,我仍然无法关闭它,我不得不制作一个按钮来完成它,因为不得不拉起任务管理器真的很烦人。工具提示也不起作用。我不知道这是否重要,但我在 Eclipse 中这样做。
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Thing extends JFrame
{
private static final long serialVersionUID = 1L;
public Thing()
{
setTitle("Thing");
setSize(1024, 768);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
JPanel panel = new JPanel();
getContentPane().add(panel);
panel.setLayout(null);
panel.setToolTipText("A panel container");
JButton quit = new JButton("Quit");
quit.setBounds(50, 60, 80, 30);
quit.setToolTipText("A button component");
quit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
panel.add(quit);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Thing thing = new Thing();
thing.setVisible(true);
}
});
}
}
这是我尝试用 X 关闭它时出现的错误。(关闭按钮可以正常工作)
java.lang.NoClassDefFoundError: sun/awt/TimedWindowEvent
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
【问题讨论】:
-
请注意:您应该在构造函数中加载图像,然后存储对图像的引用,而不是每次要绘制图像时都加载图像。
-
g.drawImage(Toolkit.getDefaultToolkit().getImage("image.jpg"), 0, 0, null);不要尝试在绘画方法中加载图像!在构造时阅读它(或者更好的是,定义一个接受Image的构造函数)。只需将其涂上油漆即可。所以假设它是一个名为image的类属性,可能会变成..g.drawImage(image, 0, 0, this); -
1)
Title应该返回(大概)1200x1200 的首选尺寸。 2) 完成此操作后,pack()框架和setLocationByPlatform(true)3) 除非此图像旨在作为其他组件的 BG,否则请考虑将其显示在标签中。 4)忘记在最终代码sn-p中突出显示对this的引用。JPanel实现了ImageObserver,因此使用对象本身作为图像加载通知。随着更多图像可用,将触发重绘。