无法更新Java Swing ImageIcon

无法更新Java Swing ImageIcon,java,swing,imageicon,Java,Swing,Imageicon,这是我的全部代码,主要类和战争游戏类,如果它真的很混乱,请原谅我正在尝试让ImageIcon在每次单击按钮时更新 这是一款战争卡游戏,每次点击按钮都会更新图片 import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java

这是我的全部代码,主要类和战争游戏类,如果它真的很混乱,请原谅我正在尝试让ImageIcon在每次单击按钮时更新

这是一款战争卡游戏,每次点击按钮都会更新图片

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.imageio.ImageIO;
import javax.swing.*;

public class WarGame extends JFrame implements ActionListener{
 static boolean y = true;
 static Scanner sc = new Scanner(System.in);

 static String suit1;
 static String suit2;
 static String Card1;
 static String Card2;
 static int Player1Wins = 0;
 static int Player2Wins = 0;
  JLabel Player1Card;
  JLabel Player2Card;
  JLabel vs;
  JLabel player1Icon;
  JLabel player2Icon;
private ImageIcon img1;
private  ImageIcon img2;
  private JButton draw;
 String player1Show;
 String player2Show;

 int f;
 int d;
 int j;
 int k;


 public WarGame(){
     setName("WarGame");
     setLayout(null);
     setSize(350,200);

     setVisible(true);
     Player1Card = new JLabel("Player One:");
     Player1Card.setBounds(10,10, 100, 50);
     add(Player1Card);
     Player2Card = new JLabel("Player Two:");
     Player2Card.setBounds(155,10, 100, 50);
     add(Player2Card);
     vs = new JLabel("V.S");
     vs.setBounds(125,70, 100, 50);
     add(vs);
     j = 0;
     k = 0;
     f = 0;
     d= 0;
     draw = new JButton("Draw");
        draw.addActionListener(this);
        draw.setBounds(100,135, 100, 30);
        add(draw);

 }





public void actionPerformed(ActionEvent e) {

        if(e.getSource() == draw) {



                 f = 1 + (int)(Math.random()*4);
                 d = 1 + (int)(Math.random()*4);
                if (f == 1 ){
                     suit1 = "Clubs";
                }else if (f == 2){
                     suit1 = "Spades";
                }else if (f == 3){
                     suit1 = "Hearts";
                }else if (f == 4){
                   suit1 = "Diamonds";
                }

                if (d == 1 ){
                     suit2 = "Clubs";
                }else if (d == 2){
                     suit2 = "Spades";
                }else if (d == 3){
                     suit2 = "Hearts";
                }else if (d == 4){
                   suit2 = "Diamonds";
                }


                 j = 2 + (int)(Math.random()*13);
                k = 2 + (int)(Math.random()*13);

               int player1 = j;
               int player2 = k;

               if (j == 11){
                  Card1 = "Jack";
               }else if (j == 12){
                   Card1 = "Queen";
               }else if (j == 13){    
                   Card1 = "King";
               }else if (j == 3){
                   j = 6;
               }
               if (k == 11){
                      Card2 = "Jack";
               }else if (k == 12){
                       Card2 = "Queen";
               }else if (k == 13){    
                       Card2 = "King";
               }else if ( k == 3){
                   k = 6;
               }

               if (j == 0){
                   j = 2;
               }
               if (j == 14){
                   Card1 = "Ace";
               }
               if (k == 0){
                   k = 2;
               }
               if (k == 14){
                   Card2 = "Ace";
               }


               if (j <= 10 && j >= 2){
                   System.out.println("Player 1: " + j + " of " + suit1);
                   player1Show = j + suit1;

               }

               if (k <= 10 && k >= 2){
                  System.out.println("Player 2: " + k  + " of " + suit2);
                  player2Show = k+suit2;

               }
               if (j >= 11 || j == 1 ){
                   System.out.println("Player 1: " + Card1 + " of " + suit1);
                   player1Show = Card1 + suit1;

               }
               if (k >= 11 || k == 1){
                    System.out.println("Player 2: " + Card2  + " of " + suit2);
                    player2Show = Card2 + suit2;


               }

               img1 = new ImageIcon("src//decks2//" + player1Show + ".png");
                player1Icon = new JLabel();
                player1Icon.setIcon(img1);
                img2 = new ImageIcon("src//decks2//" + player2Show + ".png");
                player2Icon = new JLabel();
                player2Icon.setIcon(img2);

                player1Icon.setBounds(20, 50, 100, 100);
                player2Icon.setBounds(150, 50, 100, 100);
                add(player1Icon);
                add(player2Icon);

                if (player1 > player2){
                    System.out.println("Player 1 Wins The War");
                    Player1Wins ++;
                }else if (player2 > player1){
                   System.out.println("Player 2 Wins The War");
                   Player2Wins ++;
                }else{
                   System.out.println("The War Is A Tie");
                }
                System.out.println("Player 1 Wins: " + Player1Wins + "  Player2 Wins: " + Player2Wins );


                   if(Player1Wins < Player2Wins){
                       System.out.println("Congratulations! Player 2 Wins with a score of " + Player2Wins + " to " + Player1Wins);
                   }else if (Player1Wins > Player2Wins){
                       System.out.println("Congratulations! Player 1 Wins with a score of " + Player1Wins + " to " + Player2Wins);
                   }else if (Player1Wins == Player2Wins){
                       System.out.println("Oops! Its a tie!" + Player1Wins + " to " + Player2Wins);
                   }





        }

             revalidate();    
         repaint();
    }




}
添加/删除组件后,应重新验证并重新绘制。尝试将这些添加到操作的末尾

编辑:


我很难从我这边复制你的问题,因为我没有卡片图像,但是试试这个。在顶部声明卡片图像标签的地方,也实例化它们。JLabel player1Icon=新JLabel;。在战争游戏构造函数中,添加这些标签。在执行的操作中,取出addplayer1Icon和player1show=new JLabel,只需离开player1show.setIcon即可添加重新验证;重新油漆;没有解决问题。您能否发布运行的代码,我们可以使用这些代码尝试并帮助解决您的问题。完成。所以你让我直说了。您可以获得要显示的第一个图像,但在这之后,您无法获得要显示的另一个图像?或者根本无法显示任何图像?第一个图像显示,但之后的图像不显示。例如,第一次点击按钮:红桃王牌-显示2张黑桃-第二次显示:不显示任何内容,即使数字发生变化,也会有相同的图片。是每个玩家只需要一张牌,还是两张牌相加,这意味着当你再次绘制时,每个玩家会显示两张图片?
import java.io.IOException;

public class Main {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    WarGame s = new WarGame();
    s.setVisible(true);

}

}
 public void actionPerformed(ActionEvent e){
     ...

     add(player1Icon); 
     add(player2Icon);

     ...

     revalidate();    
     repaint();
 }