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

Java GUI:JLabel可以保存对象/类吗?

郦磊
2023-03-14

我正在构建一个java国际象棋游戏,并试图构建它的GUI部分。GUI板是完整的,我可以在板上设置碎片。我不是简单地将图像设置为块,而是希望能够设置一个接受颜色和图像的Rook类的新实例化。我需要JLabel块来完成这一操作,因此在后面的代码中,我可以添加一些方法,使Rook遵守turn-take和move规则。

据我所知,JLabel只能保存图像或文本,因此我认为这可能是不可能的。如有任何帮助,我们将不胜感激。我的具体问题是:

>

  • 是否可以将JLabel作为一个带有颜色和图像的Rook对象?如果是,怎么做?

    如果不可能,有什么其他的选择,可以在板上设置一个棋子,使棋子清晰地表现出来(如木头、棋子等),并设置其图像和颜色?

    代码:

        // Sets a piece on the board    
        JLabel piece = new JLabel("whiteRook.png"); //want this to be a new instantiation of a Rook
        JPanel panel = (JPanel) chessBoard.getComponent(0);
        panel.add(piece);
        
        //  Failed Attempt ---------------------------------------------------//
        
        //      String color = "white";
        //      ImageIcon WhiteRook = new ImageIcon("whiteRook.png");
        //      Rook firstRook = new Rook(color, WhiteRook);
        //      
        //      piece = new JLabel(firstRook);
        //      panel = (JPanel) chessBoard.getComponent(0);
        //      panel.add(piece);
    
  • 共有1个答案

    洪高刚
    2023-03-14

    我最近在开发一个国际象棋应用程序。我使用的是为64个方块中的每个方块子类化的jlabel

    下面是相关代码和示例屏幕截图

    import javax.swing.*;
    import javax.swing.border.Border;
    import java.awt.*;
    
    public class Cell extends JLabel
    {
        Color backgroundColor;
        boolean highlight=false;
        Color highlightColor=new Color(132, 146, 255);
    
        Border blackBorder=BorderFactory.createLineBorder(Color.BLACK);
    
        public void setBackgroundImage(ImageIcon backgroundImage)
        {
            setIcon(backgroundImage);
        }
    
        public Cell(Color backGroundColor, ImageIcon backgroundImage)
        {
            super(backgroundImage);
            this.backgroundColor=backGroundColor;
            setBorder(blackBorder);
        }
    
        @Override
        protected void paintComponent(Graphics g)
        {
            if(!highlight) g.setColor(backgroundColor);
            else g.setColor(highlightColor);
            g.fillRect(0,0,getWidth(),getHeight());
            super.paintComponent(g);
        }
    
        public void setHighlightMode(boolean status)
        {
            if(status==highlight) return;
            highlight=status;
            repaint();
        }
    }
    
     类似资料:
    • 这里我有一个条件,假设一个用户通过调用API登录。并且响应包含用户的详细信息。我们是否可以将用户的详细信息保存为一个对象,并且可以全局访问?下面是我如何使用ObjectMapper调用模型类的api: } 从我的社交档案来看, 有些解决方案可能使用UserDefaults,但是使用9个UserDefaults来保存我们从这个响应中得到的9个键是不实际的。有什么建议的方法,我们可以这样做,当用户登录

    • 我在保存具有ManyToOne双向关系的实体时遇到问题,如下所示: 警告:HHH000437:试图保存一个或多个与未保存的瞬态实体具有不可为空的关联的实体。在保存这些从属实体之前,必须在操作中保存未保存的瞬态实体。未保存的临时实体:([com . epam . apartments booking . model . city # 912])依赖实体:([[com . epam . apartme

    • 我正在学习SpringJPA,我从将对象映射到表开始。我对OneToOne和OneToMany的关系没有问题,但我不太明白为什么我不能预先列出一个与许多关系相关的对象。我有一本可以有很多作者的书,还有一本可以有很多书的作者。通过中间表book_author正确生成模式(我可以在MySql Workbench中看到),但我得到以下示例: Hibernate:在作者(名字、姓氏)中插入值(?,) Hi

    • 所以今天我正在为Minecraft服务器开发一个插件。为此,我创建了一个“Track”类,它表示一条赛车道。为了存储所有现有的轨道与他们的数据,我想保存整个轨道对象,这使一切对我更容易。总之,我在我的Track类中实现了Serializable,以便稍后使用ObjectOutputStream。当我开始保存轨迹时,Java创建了一个对象文件,但它也会给我一个警告/错误: 14:19:00][服务器

    • 我是MongoDB的新手,我正在用Mongoose创建一个简单的数据库,模型如下:用户、游戏和玩家。 因此,一个用户不包含或包含多个游戏。每个游戏都有一个玩家,每个玩家都指一个用户。如下所示(为了清晰起见,我简化了模式): 因此,现在在前端,我想向后端发送一份请愿书,为用户Joe(_id:11111)和Bob(_id:22222)创建一个新游戏,因此我向/api/games发送了一篇帖子,帖子的主