当前位置: 首页 > 知识库问答 >
问题:

在Java网格中更改ImageIcon

澹台镜
2023-03-14

我有一个简单的棋盘,我也在尝试添加棋子。我想在不添加更多方块的情况下更改图标图像。我该怎么做?

我只想覆盖该正方形中的图像,但是我目前拥有的图像似乎添加了更多的正方形。

国际象棋方块类采用棋子类型和x/y坐标。

以下代码:

棋盘:

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

public class ChessBoard2
{   
    public static void main(String[] Args)
    {
        JFrame a = new JFrame("Chess");
        JPanel panel = new JPanel();
        ChessSquare[][] squares = new ChessSquare[8][8];
        panel.setLayout(new GridLayout(8,8));   

        int x = 0; 
        int y = 0;

        for ( x=0; x<8; x++)
            for( y=0; y<8; y++)
            {
                squares[x][y] = new ChessSquare("emptysquare", x, y); 
                panel.add(squares[x][y]);
            }

        x=5;y=8;
        squares[x][y] = new ChessSquare("king", x, y);

        a.setSize(375,375);
        a.setContentPane(panel);
        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        a.setVisible(true);

    }
}

象棋广场:

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

public class ChessSquare extends JButton
{   
    private int xPosition;  
    private int yPosition;  
    private String filename;

    public ChessSquare(String type, int x, int y)
    {
        super();

        xPosition = x;
        yPosition = y;

       if (type == "emptysquare")
       { filename = "EmptySquare.jpg";}

       if (type == "king")
       { filename = "king.jpg";}

       ImageIcon square = new ImageIcon(filename);  
       setIcon(square);

    }
}

谢了。

共有1个答案

傅献
2023-03-14
    x=5;y=8;

你不能这样做,因为你会得到一个异常。您的数组是8x8,但偏移量为0,因此您使用值0-7来索引数组。

    squares[x][y] = new ChessSquare("king", x, y);

该语句所做的只是将ChessSquare添加到您的数组中。它不会将ChessSquare添加到面板中。

正如您所说,无论如何您都不想创建一个新的ChessSquare,您只想更改现有方块的图标。所以代码应该是这样的:

ChessSquare piece = squares[4][7];
piece.setIcon( yourKingIcon );

您创建ChessSquare的基本代码是错误的。您应该将Icon作为参数传递。您不应该在ChessSquare类中读取图标。

 类似资料:
  • 在我的项目中,我有一个包含多个值的ComboBox。当我的应用程序开始时,我执行以下操作: 其中是字符串列表。 同时,在应用程序中,可以更改此值。但是,由于我已经将此组合框添加到我的GridPane中,然后在该值更改(gui.columns)时添加到场景中,因此新值没有显示在组合框中。因为我已经添加了旧的gui.course。有没有办法用新的gui.course_P更新createTestButt

  • 我有剑道网格和自定义搜索表单。在我的搜索表单中,我有提交和重置按钮。如果有搜索内容,那么网格将使用搜索的过滤器数据源进行更新,然后单击“重置”,网格将使用新数据源进行刷新。如果我将pagesize值10更改为20并单击“重置网格”,我的问题是没有重置。。然后网格页面大小变为20到10。。。如果单击“下一页”,则第二页的页面大小保持为20,第一页的页面大小保持为10 我怎么解决这个问题?任何想法?我

  • 因此,我正在构建一个基于文本的游戏,最近将交互从Eclipse控制台转移到了一个独立的窗口。我使用Swing,选择MigLayout作为最通用的布局选项。 明确地说,我不确定是MigLayout造成了问题。基本上,我有一个允许用户登录和加载游戏的系统。在登录之前,窗口工作正常,所有内容都能正确调整大小。看起来是这样的: 登录后,只要我对窗口进行重新验证/重新绘制(更改选项卡,单击“更新”),窗口就

  • 问题内容: 我需要使用Java更改日期格式 问题答案: 如何使用从一种日期格式转换为另一种日期格式:

  • 问题内容: 我想制作一个可编辑的表,然后检查数据以确保其有效。我不确定如何仅更改一个单元格的颜色。我想要一个单元格,例如(0,0)并将前景颜色设置为红色。我已经阅读了SO和Oracle上有关自定义ColorRenderer的其他文章,但是我不知道如何使用它。 谢谢。 问题答案: 假设您要用其他颜色渲染的单元格代表一种状态(我将以“拒绝并批准”为例)。然后,我将在我的表模型中实现一个名为getSta