有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java按钮消失,一张照片出现在它的位置上

我已经创建了JButtons,我想要的是当我点击按钮使其消失时,一张照片将占据其空白并显示出来。 这是我的记忆卡游戏的一部分,但我找不到一种方法在代码中实现这一点。。这就是我的按钮侦听器到目前为止所做的

private class Disappear implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
     int count =0;
        for(int i=0; i<52;i++)
        {
         if(!buttons[i].isVisible())
         {
             count+=1;
         }
        }
        if(count<2)
       ((JButton)e.getSource()).setVisible(false);

        if(count==2)
        {
           for(int i=0; i<52;i++) 
           {
               if(!buttons[i].isVisible())
               {
                   buttons[i].setVisible(true);
               }   
           }
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    您可以尝试使用JToggleButton而不是常规按钮。每当按下JToggle按钮时,显示不同/新的图像:

    class MemGame implements ActionListener(){  
    
       ImageIcon img  = new ImageIcon("Back.png"); /* Back of the card */  
       ImageIcon img2 = new ImageIcon("D1.png");   /* Card face */  
    
       /* Constructor */
       MemGame(){  
          JFrame jfrm = new JFrame("Memory Game");
          jfrm.setSize(220, 250);
          jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          jfrm.setLayout(new FlowLayout());  
    
          JToggleButton jt1 = new JToggleButton(img);  
          jt1.addActionListener(this);  
    
          jfrm.getContentPane().add(new JLabel("Select a card"));  
          jfrm.getContentPane().add(jt1);  
          jfrm.setVisible(true);  
       }  
    
       public void actionPerformed(ActionEvent ae){  
          JToggleButton jt = (JToggleButton)ae.getSource();  
          if (!jt.isSelected()) jt.setIcon(img);  
          else jt.setIcon(img2);  
       }
    }  
    

    从这里开始,只需添加处理多张按下的卡的逻辑,等等


    结果
    Before button is pressed
    After button is pressed


    信用到期时的信用: 卡片图像由:whttps://thenounproject.com/term/ace-of-diamonds/170620/ 和whttps://thenounproject.com/term/playing-card/146000/

  2. # 2 楼答案

       for(int i=0; i<52;i++)
        {
         if(!buttons[i].isVisible())
         {
             count+=1;
         }
        }
        if(count<2)
       ((JButton)e.getSource()).setVisible(false);
    

    该逻辑表示“如果零个或一个按钮不可见,则使此按钮不可见”。这是你想要实现的吗似乎不是

    然后下面的循环说“如果正好有两个按钮不可见,那么将所有不可见的按钮变为可见”——这是您的逻辑

    使“此”按钮不可见是一个简单的方法

     public void actionPerformed(ActionEvent e)
    {
    JButton jb=(JButton)e.getSource();
         if(jb.isVisible()) 
       jb.setVisible(false);
    }
    

    就够了。现在进一步使用卡片,您可能希望将图像附加到按钮,并相应地显示/隐藏它。要将图标设置为空白,请执行以下操作

          ((JB)e.getSource()).setIcon(null);
    

    进一步了解图像图标