[英]JFrame don't work when adding an Image
我遇到一个似乎有点奇怪的问题。 当我添加一个新的ImageIcon并尝试运行该程序时,它只给我一个灰色屏幕,并且没有添加任何对象。
public class Ctester {
public Ctester(){
Frame();
}
public void Frame(){
JFrame fr = new JFrame();
fr.setVisible(true);
fr.setSize(500, 500);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setResizable(false);
JPanel p = new JPanel(new GridBagLayout());
ImageIcon icon = new ImageIcon(getClass().getResource("zippo.jpg"));
JLabel l = new JLabel(icon)
JButton bm1 = new JButton("hellu");
p.add(l);
p.add(bm1);
fr.add(p);
}
public static void main(String[]args){
new Ctester();
}
}
但是,如果我删除该行:
ImageIcon icon = new ImageIcon(getClass.getResource("zippo.jpg"));
那就完美了。 我没有收到任何错误消息,并且已经寻找了一段时间,但我只能发现问题可能出在gridbaglayout上。
我该如何解决?还是必须更改布局? (这只是一个基于原始代码的简单代码作为示例,因此高度赞赏任何无需更改布局的解决方案)
大多数代码是错误的:
Swing组件应在事件调度线程(EDT)上创建。
将所有组件添加到框架后,应使框架可见。
您尝试使用GridBagLayout,但是在添加组件时未使用任何GridBagConstraints。
方法名称(框架)不应以大写字母开头。
阅读Swing教程,了解Swing的基础知识。
您可以在以下位置找到工作示例:
因此,不需更改版面的任何解决方案均受到高度赞赏
从工作示例开始,并根据您的要求进行更改。 如果您从更好的结构化代码开始,那么问题将会更少。
如果在调整窗口大小或最小化/最大化之后正确绘制某些图形,则这肯定是竞争状况的标志,因为您没有在事件分派器线程上启动GUI。 您的主要问题是您要尽早调用setVisible()的方式,直到将所有组件添加到顶级容器之后才调用setVisible()。 另一个问题是您没有在事件分配器线程上启动GUI。 请在固定代码中查看下面的主要方法:
public class Ctester {
public Ctester() {
Frame();
}
public void Frame() {
JFrame fr = new JFrame();
fr.setSize(500, 500);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setResizable(false);
JPanel p = new JPanel(new GridBagLayout());
JLabel l = new JLabel("label");
JButton bm1 = new JButton("hellu");
p.add(l);
p.add(bm1);
fr.add(p);
fr.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Ctester();
}
});
}
}
尝试使用此代码,您可能希望将第一行代码放在try catch中,以防万一找不到图片。
URL iconURL = getClass().getResource("/some/package/favicon.png");
// iconURL is null when not found
ImageIcon icon = new ImageIcon(iconURL);
fr.setIconImage(icon.getImage());
如果仅在Windows上使用此程序,也请使用.ico文件;如果它将跨平台使用,请使用.png文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.