我在使用本书中的这个简单示例代码时遇到了问题。它应该在一个窗口(北部和南部标签)中表示相同的图像2次,一个在另一个窗口之上。当我运行它时,它显示this而不是this(我很抱歉没有剪切图像或调整大小)下面是我的代码。我在Ubuntu 13.04上运行Eclipse Juno。
package gui;
import java.awt.BorderLayout;
import javax.swing.*;
public class Gui {
public static void main(String[] args) {
JLabel northLabel = new JLabel ( "North" );
ImageIcon labelIcon = new ImageIcon ("GUItip.gif");
JLabel centerLabel = new JLabel (labelIcon);
JLabel southLabel = new JLabel (labelIcon);
southLabel.setText("South");
JFrame application = new JFrame();
application.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
application.add(northLabel, BorderLayout.NORTH);
application.add(centerLabel, BorderLayout.CENTER);
application.add(southLabel, BorderLayout.SOUTH);
application.setSize(300, 300);
application.setVisible(true);
}
}
答案 0 :(得分:2)
您需要专注于以下声明:
ImageIcon labelIcon = new ImageIcon ("GUItip.gif");
当启动新的ImageIcon时...它默认搜索执行文件夹中提供的地址,即在这种情况下,应在工作区/用户目录中搜索“GUItip.gif”。
一种解决方案是在您的工作区(程序执行)文件夹中提供GUItip.gif图像。 另一种解决方案是提供绝对路径。
C:\USER\Workspace\project_name\GUItip.gif
虽然更好的方法是创建一个特定的文件夹,您可以在其中保存项目中使用的所有图像。使用文件夹的绝对路径创建最终的静态String变量。现在,该项目中的任何程序员都很容易知道在哪里查找图像。 有很好的方法可以使用这种映射..通过XML加载到开头..通过resourcebundle等,但这是一个完全不同的主题。
答案 1 :(得分:0)
图像可能无法正确加载。尝试使用try / catch块来查看是否是这种情况。
例如:
Image img;
File f = new File(//image url);
try {
img = ImageIO.read(f);
} catch (IOException e) {
String curr_dir = System.getProperty("user.dir");
throw new IllegalArgumentException("Image could not be found from " + curr_dir);
}
ImageIcon labelIcon = new ImageIcon(img);