0

我在使用书中的这个简单示例代码时遇到了麻烦。它应该在一个窗口(南北标签)中代表同一图像 2 次,一个在另一个之上。当我运行它时,它会显示这个而不是这个(我很抱歉没有剪切图像或调整它们的大小)下面是我的代码。我在 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);


    }

}
4

2 回答 2

2

您需要专注于以下语句:

ImageIcon labelIcon = new ImageIcon ("GUItip.gif");

当启动新的 ImageIcon.. 时,它默认在执行文件夹中搜索提供的地址,即在这种情况下,应在工作空间/用户目录中搜索“GUItip.gif”。

一种解决方案是在您的工作区(程序执行)文件夹中提供可用的 GUItip.gif 图像。另一种解决方案是提供绝对路径。例如。

C:\USER\Workspace\project_name\GUItip.gif

虽然更好的方法是创建一个特定的文件夹,用于保存项目中使用的所有图像。使用文件夹的绝对路径创建最终的静态字符串变量。现在,该项目中的任何程序员都可以很容易地知道在哪里查找图像。有很好的方法来使用这个映射..通过在开始时加载的 XML..通过 resourcebundle 等,但这完全是一个不同的主题。

于 2013-05-03T01:48:47.313 回答
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);
于 2013-05-03T00:04:28.493 回答