java - 翻转存储卡游戏的卡片在 java 中不起作用(没有小程序)

标签 java swing jlabel imageicon

我正在制作内存卡游戏。我首先添加了 5 个 ImageIcons,卡片的初始值(图像)处于翻转状态,添加了一个用于通过 Action Listener 翻转卡片的按钮,但是当我单击该按钮时似乎无法翻转它。 我还是 GUI 的初学者,我不想使用小程序。

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

//this class gonna control the basic ops of the game
public class MemoControl extends JFrame{

    public JLabel label;
    public JButton button;

            //images
            public ImageIcon image1;
            public JLabel label1;
            public ImageIcon image2;
            public JLabel label2;
            public ImageIcon image3;
            public JLabel label3;
            public ImageIcon image4;
            public JLabel label4;
            public ImageIcon image5;
            public JLabel label5;

            public MemoControl(){

                    setLayout(new FlowLayout());

                    image1 = new      ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label1 = new JLabel(image1);
                    add(label1);

                    image2 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label2 = new JLabel(image2);
                    add(label2);

                    image3 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label3 = new JLabel(image3);
                    add(label3);

                    image4 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label4 = new JLabel(image4);
                    add(label4);

                    image5 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label5 = new JLabel(image5);
                    add(label5);


                    /*label = new JLabel("Welcome to AMY Memo Game");
                    add(label);*/

                    /*textField = new JTextField(15);
                    add(textField);*/

                    button = new JButton("Flip");
                    add(button);

                    EventClass event = new EventClass();
                    button.addActionListener(event);

                }//MyMemo constr end

                private class EventClass implements ActionListener{

                        public void actionPerformed(ActionEvent e){
                            if(e.getSource() == button){
                                image1 = new ImageIcon(getClass().getResource("deer_card.jpg"));
                                label1 = new JLabel(image1);}

                            }
                    }//Event class end

            public static void main(String args[]){

                    MemoControl gui = new MemoControl();

                    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    gui.pack();
                    gui.setVisible(true);
                    gui.setTitle("My Memo");

            }//main end

    }//AMYMemo class end

更新后的代码:

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

//this class gonna control the basic ops of the game
public class MemoControl extends JFrame{

    public JLabel label;
    public JButton button;

            //images
            public ImageIcon image1;
            public JLabel label1;
            public ImageIcon image2;
            public JLabel label2;
            public ImageIcon image3;
            public JLabel label3;
            public ImageIcon image4;
            public JLabel label4;
            public ImageIcon image5;
            public JLabel label5;

            public MemoControl(){

                    setLayout(new FlowLayout());

                    image1 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label1 = new JLabel(image1);
                    add(label1);

                    image2 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label2 = new JLabel(image2);
                    add(label2);

                    image3 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label3 = new JLabel(image3);
                    add(label3);

                    image4 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label4 = new JLabel(image4);
                    add(label4);

                    image5 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
                    label5 = new JLabel(image5);
                    add(label5);


                    /*label = new JLabel("Welcome to AMY Memo Game");
                    add(label);*/

                    /*textField = new JTextField(15);
                    add(textField);*/

                    button = new JButton("Flip");
                    add(button);

                    EventClass event = new EventClass();
                    button.addActionListener(event);

                }//MyMemo constr end

                private class EventClass implements ActionListener{

                        public void actionPerformed(ActionEvent e){
                            if(e.getSource() == button){

                                image1 = new ImageIcon(getClass().getResource("deer_card.jpg"));
                                label1.setIcon(image1);
                                }

                            }
                    }//Event class end

            public static void main(String args[]){

                    MemoControl gui = new MemoControl();

                    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    gui.pack();
                    gui.setVisible(true);
                    gui.setTitle("My Memo");

            }//main end

    }//AMYMemo class end

最佳答案

尝试 label1.setIcon(image1); 而不是 EventClass 中的 label1 = new JLabel(image1);。因为您使用新的 Icon 创建了一个 JLabel 的新实例,它没有添加到您的 JFrame 中。

关于java - 翻转存储卡游戏的卡片在 java 中不起作用(没有小程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23497405/

相关文章:

java - 在 JTable 中显示来自数据库的数据

java - 强制显示 JLabel 子类

java - Jlabel ImageIcon绘制在负坐标

java - JLabel HTML 上标混淆了格式。有什么技巧可以解决这个问题吗?

java - 从子类调用重载函数

java - 无法让此类在客户端代码上的 java 中工作 - 没有编译错误,但运行时错误

java - JUnit 是否按顺序执行测试用例?

java - 调整主框架大小时 JPanel 窗口不缩放

java - 单独类中的 MouseListener 不起作用

java - 以较少冗余的方式创建多个 Jlabels 和 JTextFields?