【问题标题】:Display a tic-tac-toe board with image icons in labels在标签中显示带有图像图标的井字棋盘
【发布时间】:2013-11-10 14:53:12
【问题描述】:

我的问题是这样的:

(游戏:显示井字游戏)显示一个包含九个标签的框架。 标签可以显示 X 的图像图标或 O 的图像图标。 显示什么是随机决定的。使用Math.random()方法生成整数01,对应显示一个XO 图片图标。这些图像位于 x.gifo.gif

文件中

我遇到的问题是 imgaes 不会在程序中显示。当我运行它时,程序会生成一个空帧。 我的猜测是图像文件的位置肯定有问题。

我已经从这本书的出版商那里下载了一个 .zip 文件,我正在使用(Liang 的 Java 编程简介),看起来图像应该包含该文件。但它没有。所以我在网上找到了相同的 .gif 并下载了它们。现在我想知道我如何设置正确的位置。

我认为代码本身应该没问题。 反正就是这里了。

import java.awt.GridLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TicTacToe extends JFrame {
private ImageIcon cross = new ImageIcon("image/x.gif");
private ImageIcon not = new ImageIcon("image/o.gif");

public TicTacToe() {
    setLayout(new GridLayout(3, 3));

    for (int i = 0; i < 9; i++) {
        int mode = (int) (Math.random() * 3.0);
        if (mode == 0)
            add(new JLabel(this.cross));
        else if (mode == 1)
            add(new JLabel(this.not));
        else
            add(new JLabel());
    }
}

public static void main(String[] args) {
    TicTacToe frame = new TicTacToe();
    frame.setTitle("TicTacToe");
    frame.setSize(200, 200);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(3);
    frame.setVisible(true);
  }
}

另一个问题,会使用这个:

import java.awt.*;
import javax.swing.*;

代替这个:

import java.awt.GridLayout;
import javax.swing.ImageIcon;

做一件坏事?我在想如果认为我的讲师会发现总是导入所有而不是我需要的单独的懒惰。

提前 - 谢谢。

【问题讨论】:

    标签: java image user-interface tic-tac-toe


    【解决方案1】:

    这些语句将编译并执行

    private ImageIcon cross = new ImageIcon("image/x.gif");
    private ImageIcon not = new ImageIcon("image/o.gif");
    

    如果您在主项目文件夹之外有一个图像子文件夹并且该图像子文件夹位于构建路径上。这些 ImageIcon 应该以自己的方法构建,因此如果 gif 丢失,您可以处理生成的错误。

    我像这样读取图像文件。

        try {
            img = ImageIO.read(new File("graphics/close_0.jpg"));
            remoteController = ImageIO.read(new File("graphics/pilot.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    这样,您的代码不必等待图像加载。

    如果您使用像 Eclipse 这样的集成开发环境 (IDE),Eclipse 会从代码中生成以下语句。

    import java.awt.GridLayout;
    import javax.swing.ImageIcon;  
    

    如果您不使用 IDE,则以下语句是可以的。您不想花费大量时间手动输入导入语句。

    import java.awt.*;
    import javax.swing.*;
    

    【讨论】:

    • 好的,在你们的帮助下,我设法让程序以 .gif 的方式运行,非常感谢。我正在使用 Eclipse,但我所做的是从每个程序开始导入我将要使用的库。 会说编写程序更有效率,当它完成后,让 Eclipse 建议你需要导入什么?
    • 除非您在添加外部类时让 Eclipse 生成导入语句,否则您将遇到编译错误。您可以根据需要多次按 Cntl-Shift-O,或右键单击并选择 Source -> Organize Imports。
    【解决方案2】:

    您的图标文件必须位于名为“images”的文件夹中,并且该文件夹必须位于运行程序的默认目录中。

    【讨论】:

    • 这是否意味着我必须在该特定 java 项目的源文件夹中创建一个新文件夹?或者我可以把它放在工作区文件夹/“书”文件夹吗?
    • 将用于开发的图像放在哪里是另一个问题,尽管使用 Eclipse 或 IntelliJ 等 IDE 运行它们很方便。我假设您使用诸如“java -jar TicTacToe.jar”之类的命令将其作为 jar 文件运行;在这种情况下,当您这样做时,您位于特定的“默认”文件夹中。图像必须位于该文件夹中,您的代码才能按照您编写的方式获取 GIF 文件。在你的 IDE 中会有一个等价物,可能是“项目”或“项目文件夹”之外的图像文件夹,或者你的作品。
    • 感谢您的帮助,我实际上正在使用 Eclipse,很抱歉没有在问题中通知您。我所做的是:我将 .gif 复制/粘贴到项目文件夹中,就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2011-09-19
    相关资源
    最近更新 更多