1

出于显而易见的原因,我在游戏中实现了 MouseListener;用户需要能够点击板。

问题不在于单击板本身,而是使用重置按钮resetBoard和鼠标侦听器。当我单击按钮时,板会发生变化,但是当单击被释放时,板会再次发生变化。public void mouseClicked(MouseEvent e)考虑到我的所有操作都在块下,我找不到任何地方可以解释为什么它在向下单击和释放时都会发生变化。我有空mouseReleased的 , mouseEntered, mouseExited, mousePressed.

mouseClicked基本上,有人可以帮助我理解为什么当鼠标不为空时,板在鼠标按下和向上(以相同的动作)时都会重置。

哦,我知道我不需要所有这些进口,只是我曾经使用过它们,但我忘了把它们拿出来,因为我对这个当前的问题太着迷了。

抱歉重复...以及其中的所有内容。这是我目前知道如何做到这一点的唯一方法。

谢谢!

public class Blox implements ActionListener {

    private final String gameVersion = "Blox - v1.0.2";

    private ImageIcon purpleBlock = new ImageIcon();
    private ImageIcon redBlock = new ImageIcon();
    private ImageIcon blueBlock = new ImageIcon();
    private ImageIcon greenBlock = new ImageIcon();
    private ImageIcon closeImage = new ImageIcon();

    private JButton block1 = new JButton();
    private JButton block2 = new JButton();
    private JButton block3 = new JButton();
    private JButton block4 = new JButton();
    private JButton block5 = new JButton();
    private JButton block6 = new JButton();
    private JButton block7 = new JButton();

    private JButton block8 = new JButton();
    private JButton block9 = new JButton();
    private JButton block10 = new JButton();
    private JButton block11 = new JButton();
    private JButton block12 = new JButton();
    private JButton block13 = new JButton();
    private JButton block14 = new JButton();

    private JButton block15 = new JButton();
    private JButton block16 = new JButton();
    private JButton block17 = new JButton();
    private JButton block18 = new JButton();
    private JButton block19 = new JButton();
    private JButton block20 = new JButton();
    private JButton block21 = new JButton();

    private JButton block22 = new JButton();
    private JButton block23 = new JButton();
    private JButton block24 = new JButton();
    private JButton block25 = new JButton();
    private JButton block26 = new JButton();
    private JButton block27 = new JButton();
    private JButton block28 = new JButton();

    private JButton block29 = new JButton();
    private JButton block30 = new JButton();
    private JButton block31 = new JButton();
    private JButton block32 = new JButton();
    private JButton block33 = new JButton();
    private JButton block34 = new JButton();
    private JButton block35 = new JButton();

    private JButton block36 = new JButton();
    private JButton block37 = new JButton();
    private JButton block38 = new JButton();
    private JButton block39 = new JButton();
    private JButton block40 = new JButton();
    private JButton block41 = new JButton();
    private JButton block42 = new JButton();

    private JButton block43 = new JButton();
    private JButton block44 = new JButton();
    private JButton block45 = new JButton();
    private JButton block46 = new JButton();
    private JButton block47 = new JButton();
    private JButton block48 = new JButton();
    private JButton block49 = new JButton();

    // Error console init
    private JLabel errorMessage = new JLabel();
    private JPanel errorBg = new JPanel();
    private JButton closeError = new JButton();

    // Score/UI Inits
    private JButton resetBoard = new JButton("Reset Board");

    /**
     *  700 x 480 Frame Size
     *  Sets Up and displays initial scene.
     *
     */
    private void game() {

        // Initialize mainFrame
        JFrame mainFrame = new JFrame(gameVersion);
        Dimension minSize = new Dimension(700,480);
        mainFrame.setMinimumSize(minSize);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setLayout(null);
        mainFrame.setResizable(false);
        try {
            mainFrame.setContentPane(new JLabel(new ImageIcon(
                ImageIO.read(new File("bggrad.jpg")))));
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Setup Block Images
        try {
            purpleBlock.setImage(ImageIO.read(new File("purpleBlock.png")));
            redBlock.setImage(ImageIO.read(new File("redBlock.png")));
            blueBlock.setImage(ImageIO.read(new File("blueBlock.png")));
            greenBlock.setImage(ImageIO.read(new File("greenBlock.png")));
            closeImage.setImage(ImageIO.read(new File("close.jpg")));
        } catch (IOException e) {
            e.printStackTrace();
        }   

        // Sets up error message panel
        // Only displayed if error occurs on ActionListener
        errorMessage.setText("");
        errorMessage.setForeground(Color.black);
        Font newLabelFont = new Font(errorMessage.getFont().getName(),
            Font.BOLD,errorMessage.getFont().getSize());
        errorMessage.setFont(newLabelFont); 
        closeError.setIcon(closeImage); 
        closeError.setBounds(0,0,24,24);
        errorBg.setBounds(0,430,700,30);
        errorBg.setBackground(Color.lightGray);
        errorBg.add(closeError);
        errorBg.add(errorMessage);
        errorBg.setVisible(false);

        // Sets up Score/UI Portions of Screen
        resetBoard.setBounds(60,363,175,25);
        resetBoard.setVisible(true);
        resetBoard.addActionListener(this);

        // Randomize and add Images to each JButton
        gameReset();

        // Add Listeners to each block
        block1.addActionListener(this);
        block2.addActionListener(this);
        block3.addActionListener(this);
        block4.addActionListener(this);
        block5.addActionListener(this);
        block6.addActionListener(this);
        block7.addActionListener(this);

        block8.addActionListener(this);
        block9.addActionListener(this);
        block10.addActionListener(this);
        block11.addActionListener(this);
        block12.addActionListener(this);
        block13.addActionListener(this);
        block14.addActionListener(this);

        block15.addActionListener(this);
        block16.addActionListener(this);
        block17.addActionListener(this);
        block18.addActionListener(this);
        block19.addActionListener(this);
        block20.addActionListener(this);
        block21.addActionListener(this);

        block22.addActionListener(this);
        block23.addActionListener(this);
        block24.addActionListener(this);
        block25.addActionListener(this);
        block26.addActionListener(this);
        block27.addActionListener(this);
        block28.addActionListener(this);

        block29.addActionListener(this);
        block30.addActionListener(this);
        block31.addActionListener(this);
        block32.addActionListener(this);
        block33.addActionListener(this);
        block34.addActionListener(this);
        block35.addActionListener(this);

        block36.addActionListener(this);
        block37.addActionListener(this);
        block38.addActionListener(this);
        block39.addActionListener(this);
        block40.addActionListener(this);
        block41.addActionListener(this);
        block42.addActionListener(this);

        block43.addActionListener(this);
        block44.addActionListener(this);
        block45.addActionListener(this);
        block46.addActionListener(this);
        block47.addActionListener(this);
        block48.addActionListener(this);
        block49.addActionListener(this);


        // Set Block Locations
        block1.setBounds(300,50,50,50);
        block2.setBounds(350,50,50,50);
        block3.setBounds(400,50,50,50);
        block4.setBounds(450,50,50,50);
        block5.setBounds(500,50,50,50);
        block6.setBounds(550,50,50,50);
        block7.setBounds(600,50,50,50);

        block8.setBounds(300,100,50,50);
        block9.setBounds(350,100,50,50);
        block10.setBounds(400,100,50,50);
        block11.setBounds(450,100,50,50);
        block12.setBounds(500,100,50,50);
        block13.setBounds(550,100,50,50);
        block14.setBounds(600,100,50,50);

        block15.setBounds(300,150,50,50);
        block16.setBounds(350,150,50,50);
        block17.setBounds(400,150,50,50);
        block18.setBounds(450,150,50,50);
        block19.setBounds(500,150,50,50);
        block20.setBounds(550,150,50,50);
        block21.setBounds(600,150,50,50);

        block22.setBounds(300,200,50,50);
        block23.setBounds(350,200,50,50);
        block24.setBounds(400,200,50,50);
        block25.setBounds(450,200,50,50);
        block26.setBounds(500,200,50,50);
        block27.setBounds(550,200,50,50);
        block28.setBounds(600,200,50,50);

        block29.setBounds(300,250,50,50);
        block30.setBounds(350,250,50,50);
        block31.setBounds(400,250,50,50);
        block32.setBounds(450,250,50,50);
        block33.setBounds(500,250,50,50);
        block34.setBounds(550,250,50,50);
        block35.setBounds(600,250,50,50);

        block36.setBounds(300,300,50,50);
        block37.setBounds(350,300,50,50);
        block38.setBounds(400,300,50,50);
        block39.setBounds(450,300,50,50);
        block40.setBounds(500,300,50,50);
        block41.setBounds(550,300,50,50);
        block42.setBounds(600,300,50,50);

        block43.setBounds(300,350,50,50);
        block44.setBounds(350,350,50,50);
        block45.setBounds(400,350,50,50);
        block46.setBounds(450,350,50,50);
        block47.setBounds(500,350,50,50);
        block48.setBounds(550,350,50,50);
        block49.setBounds(600,350,50,50);

        // Add blocks to frame
        mainFrame.getContentPane().add(block1);
        mainFrame.getContentPane().add(block2);
        mainFrame.getContentPane().add(block3);
        mainFrame.getContentPane().add(block4);
        mainFrame.getContentPane().add(block5);
        mainFrame.getContentPane().add(block6);
        mainFrame.getContentPane().add(block7);

        mainFrame.getContentPane().add(block8);
        mainFrame.getContentPane().add(block9);
        mainFrame.getContentPane().add(block10);
        mainFrame.getContentPane().add(block11);
        mainFrame.getContentPane().add(block12);
        mainFrame.getContentPane().add(block13);
        mainFrame.getContentPane().add(block14);

        mainFrame.getContentPane().add(block15);
        mainFrame.getContentPane().add(block16);
        mainFrame.getContentPane().add(block17);
        mainFrame.getContentPane().add(block18);
        mainFrame.getContentPane().add(block19);
        mainFrame.getContentPane().add(block20);
        mainFrame.getContentPane().add(block21);

        mainFrame.getContentPane().add(block22);
        mainFrame.getContentPane().add(block23);
        mainFrame.getContentPane().add(block24);
        mainFrame.getContentPane().add(block25);
        mainFrame.getContentPane().add(block26);
        mainFrame.getContentPane().add(block27);
        mainFrame.getContentPane().add(block28);

        mainFrame.getContentPane().add(block29);
        mainFrame.getContentPane().add(block30);
        mainFrame.getContentPane().add(block31);
        mainFrame.getContentPane().add(block32);
        mainFrame.getContentPane().add(block33);
        mainFrame.getContentPane().add(block34);
        mainFrame.getContentPane().add(block35);

        mainFrame.getContentPane().add(block36);
        mainFrame.getContentPane().add(block37);
        mainFrame.getContentPane().add(block38);
        mainFrame.getContentPane().add(block39);
        mainFrame.getContentPane().add(block40);
        mainFrame.getContentPane().add(block41);
        mainFrame.getContentPane().add(block42);

        mainFrame.getContentPane().add(block43);
        mainFrame.getContentPane().add(block44);
        mainFrame.getContentPane().add(block45);
        mainFrame.getContentPane().add(block46);
        mainFrame.getContentPane().add(block47);
        mainFrame.getContentPane().add(block48);
        mainFrame.getContentPane().add(block49);

        mainFrame.getContentPane().add(errorBg);

        mainFrame.getContentPane().add(resetBoard);

        //mainFrame.pack();
        mainFrame.setVisible(true);  
    }


    /**
     *  Checks onClick event for which JButton was clicked
     *  and changes JButton.setIcon() accordingly.
     *
     *  @param  none
     *  @return none 
     *  @see    java.awt.event.*
     *  @see    JButton
     *  @see    setIcon()
     *  @see    getIcon()
     *
     */
    public void actionPerformed(ActionEvent e) {

        if(e.getSource()==resetBoard) {
            System.out.println("Resetting");
            gameReset();
        }

        if(e.getSource()==errorBg || e.getSource()==errorMessage) {
            errorBg.setVisible(false);
        }

        if(e.getSource()==block1) {
            if(block1.getIcon()==purpleBlock) {
                block1.setIcon(blueBlock);
                block2.setIcon(redBlock);
                block8.setIcon(redBlock);
            } else if(block1.getIcon()==blueBlock) {
                block1.setIcon(redBlock);
                block2.setIcon(greenBlock);
                block8.setIcon(greenBlock);
            } else if(block1.getIcon()==redBlock) {
                block1.setIcon(greenBlock);
                block2.setIcon(blueBlock);
                block8.setIcon(blueBlock);
            } else if(block1.getIcon()==greenBlock) {
                block1.setIcon(blueBlock);
                block2.setIcon(redBlock);
                block8.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block2) {
            if(block2.getIcon()==purpleBlock) {
                block2.setIcon(blueBlock);
                block1.setIcon(redBlock);
                block3.setIcon(redBlock);
                block9.setIcon(redBlock);
            } else if(block2.getIcon()==blueBlock) {
                block2.setIcon(redBlock);
                block1.setIcon(greenBlock);
                block3.setIcon(greenBlock);
                block9.setIcon(greenBlock);
            } else if(block2.getIcon()==redBlock) {
                block2.setIcon(greenBlock);
                block1.setIcon(blueBlock);
                block3.setIcon(blueBlock);
                block9.setIcon(blueBlock);
            } else if(block2.getIcon()==greenBlock) {
                block2.setIcon(blueBlock);
                block1.setIcon(redBlock);
                block3.setIcon(redBlock);
                block9.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block3) {
            if(block3.getIcon()==purpleBlock) {
                block3.setIcon(blueBlock);
                block2.setIcon(redBlock);
                block4.setIcon(redBlock);
                block10.setIcon(redBlock);
            } else if(block3.getIcon()==blueBlock) {
                block3.setIcon(redBlock);
                block2.setIcon(greenBlock);
                block4.setIcon(greenBlock);
                block10.setIcon(greenBlock);
            } else if(block3.getIcon()==redBlock) {
                block3.setIcon(greenBlock);
                block2.setIcon(blueBlock);
                block4.setIcon(blueBlock);
                block10.setIcon(blueBlock);
            } else if(block3.getIcon()==greenBlock) {
                block3.setIcon(blueBlock);
                block2.setIcon(redBlock);
                block4.setIcon(redBlock);
                block10.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block4) {
            if(block4.getIcon()==purpleBlock) {
                block4.setIcon(blueBlock);
                block3.setIcon(redBlock);
                block5.setIcon(redBlock);
                block11.setIcon(redBlock);
            } else if(block4.getIcon()==blueBlock) {
                block4.setIcon(redBlock);
                block3.setIcon(greenBlock);
                block5.setIcon(greenBlock);
                block11.setIcon(greenBlock);
            } else if(block4.getIcon()==redBlock) {
                block4.setIcon(greenBlock);
                block3.setIcon(blueBlock);
                block5.setIcon(blueBlock);
                block11.setIcon(blueBlock);
            } else if(block4.getIcon()==greenBlock) {
                block4.setIcon(blueBlock);
                block3.setIcon(redBlock);
                block5.setIcon(redBlock);
                block11.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block5) {
            if(block5.getIcon()==purpleBlock) {
                block5.setIcon(blueBlock);
                block4.setIcon(redBlock);
                block6.setIcon(redBlock);
                block12.setIcon(redBlock);
            } else if(block5.getIcon()==blueBlock) {
                block5.setIcon(redBlock);
                block4.setIcon(greenBlock);
                block6.setIcon(greenBlock);
                block12.setIcon(greenBlock);
            } else if(block5.getIcon()==redBlock) {
                block5.setIcon(greenBlock);
                block4.setIcon(blueBlock);
                block6.setIcon(blueBlock);
                block12.setIcon(blueBlock);
            } else if(block5.getIcon()==greenBlock) {
                block5.setIcon(blueBlock);
                block4.setIcon(redBlock);
                block6.setIcon(redBlock);
                block12.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block5) {
            if(block5.getIcon()==purpleBlock) {
                block5.setIcon(blueBlock);
                block4.setIcon(redBlock);
                block6.setIcon(redBlock);
                block12.setIcon(redBlock);
            } else if(block5.getIcon()==blueBlock) {
                block5.setIcon(redBlock);
                block4.setIcon(greenBlock);
                block6.setIcon(greenBlock);
                block12.setIcon(greenBlock);
            } else if(block5.getIcon()==redBlock) {
                block5.setIcon(greenBlock);
                block4.setIcon(blueBlock);
                block6.setIcon(blueBlock);
                block12.setIcon(blueBlock);
            } else if(block5.getIcon()==greenBlock) {
                block5.setIcon(blueBlock);
                block4.setIcon(redBlock);
                block6.setIcon(redBlock);
                block12.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block6) {
            if(block6.getIcon()==purpleBlock) {
                block6.setIcon(blueBlock);
                block5.setIcon(redBlock);
                block7.setIcon(redBlock);
                block13.setIcon(redBlock);
            } else if(block6.getIcon()==blueBlock) {
                block6.setIcon(redBlock);
                block5.setIcon(greenBlock);
                block7.setIcon(greenBlock);
                block13.setIcon(greenBlock);
            } else if(block6.getIcon()==redBlock) {
                block6.setIcon(greenBlock);
                block5.setIcon(blueBlock);
                block7.setIcon(blueBlock);
                block13.setIcon(blueBlock);
            } else if(block6.getIcon()==greenBlock) {
                block6.setIcon(blueBlock);
                block5.setIcon(redBlock);
                block7.setIcon(redBlock);
                block13.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block7) {
            if(block7.getIcon()==purpleBlock) {
                block7.setIcon(blueBlock);
                block6.setIcon(redBlock);
                block14.setIcon(redBlock);
                //block13.setIcon(redBlock);
            } else if(block7.getIcon()==blueBlock) {
                block7.setIcon(redBlock);
                block6.setIcon(greenBlock);
                block14.setIcon(greenBlock);
                //block13.setIcon(greenBlock);
            } else if(block7.getIcon()==redBlock) {
                block7.setIcon(greenBlock);
                block6.setIcon(purpleBlock);
                block14.setIcon(purpleBlock);
                //block13.setIcon(blueBlock);
            } else if(block7.getIcon()==greenBlock) {
                block7.setIcon(purpleBlock);
                block6.setIcon(blueBlock);
                block14.setIcon(blueBlock);
                //block13.setIcon(redBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block8) {
            if(block8.getIcon()==purpleBlock) {
                block8.setIcon(blueBlock);
                block1.setIcon(redBlock);
                block9.setIcon(redBlock);
                block15.setIcon(redBlock);
            } else if(block8.getIcon()==blueBlock) {
                block8.setIcon(redBlock);
                block1.setIcon(greenBlock);
                block9.setIcon(greenBlock);
                block15.setIcon(greenBlock);
            } else if(block8.getIcon()==redBlock) {
                block8.setIcon(greenBlock);
                block1.setIcon(purpleBlock);
                block9.setIcon(purpleBlock);
                block15.setIcon(purpleBlock);
            } else if(block8.getIcon()==greenBlock) {
                block8.setIcon(purpleBlock);
                block1.setIcon(blueBlock);
                block9.setIcon(blueBlock);
                block15.setIcon(blueBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }

        if(e.getSource()==block9) {
            if(block9.getIcon()==purpleBlock) {
                block9.setIcon(blueBlock);
                block2.setIcon(redBlock);
                block10.setIcon(redBlock);
                block8.setIcon(redBlock);
                block16.setIcon(redBlock);
            } else if(block9.getIcon()==blueBlock) {
                block9.setIcon(redBlock);
                block2.setIcon(greenBlock);
                block10.setIcon(greenBlock);
                block8.setIcon(greenBlock);
                block16.setIcon(greenBlock);
            } else if(block9.getIcon()==redBlock) {
                block9.setIcon(greenBlock);
                block2.setIcon(purpleBlock);
                block10.setIcon(purpleBlock);
                block8.setIcon(purpleBlock);
                block16.setIcon(purpleBlock);
            } else if(block9.getIcon()==greenBlock) {
                block9.setIcon(purpleBlock);
                block2.setIcon(blueBlock);
                block10.setIcon(blueBlock);
                block8.setIcon(blueBlock);
                block16.setIcon(blueBlock);
            } else {
                // Woops! Something went wrong!
                errorBg.setVisible(true);
                errorMessage.setText("Woops! Something went wrong! @" + e.getSource());
            }   
        }
    }

    public void gameReset() {

        // Add Tiles to mainFrame
        block1.setIcon(randomizer());
        block2.setIcon(randomizer());
        block3.setIcon(randomizer());
        block4.setIcon(randomizer());
        block5.setIcon(randomizer());
        block6.setIcon(randomizer());
        block7.setIcon(randomizer());

        block8.setIcon(randomizer());
        block9.setIcon(randomizer());
        block10.setIcon(randomizer());
        block11.setIcon(randomizer());
        block12.setIcon(randomizer());
        block13.setIcon(randomizer());
        block14.setIcon(randomizer());

        block15.setIcon(randomizer());
        block16.setIcon(randomizer());
        block17.setIcon(randomizer());
        block18.setIcon(randomizer());
        block19.setIcon(randomizer());
        block20.setIcon(randomizer());
        block21.setIcon(randomizer());

        block22.setIcon(randomizer());
        block23.setIcon(randomizer());
        block24.setIcon(randomizer());
        block25.setIcon(randomizer());
        block26.setIcon(randomizer());
        block27.setIcon(randomizer());
        block28.setIcon(randomizer());

        block29.setIcon(randomizer());
        block30.setIcon(randomizer());
        block31.setIcon(randomizer());
        block32.setIcon(randomizer());
        block33.setIcon(randomizer());
        block34.setIcon(randomizer());
        block35.setIcon(randomizer());

        block36.setIcon(randomizer());
        block37.setIcon(randomizer());
        block38.setIcon(randomizer());
        block39.setIcon(randomizer());
        block40.setIcon(randomizer());
        block41.setIcon(randomizer());
        block42.setIcon(randomizer());

        block43.setIcon(randomizer());
        block44.setIcon(randomizer());
        block45.setIcon(randomizer());
        block46.setIcon(randomizer());
        block47.setIcon(randomizer());
        block48.setIcon(randomizer());
        block49.setIcon(randomizer());
    }

    public ImageIcon randomizer() {

        Random r = new Random();
        int rNum = r.nextInt(4);

        if(rNum==0) {
            return purpleBlock;
        } else if(rNum==1) {
            return redBlock;
        } else if(rNum==2) {
            return greenBlock;
        } else {
            return blueBlock;
        }
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Blox().game();
            }
        });
    }
}
4

2 回答 2

3

不要将 MouseListener 与 JButton 一起使用,而应使用 ActionListener。这在按钮教程中都有很好的说明,我强烈建议您尽快阅读它们。

我在您的代码中看到的一个主要问题可以在这里找到:

public ImageIcon randomizer() {

    try {
        purpleBlock.setImage(ImageIO.read(new File("purpleBlock.png")));
        redBlock.setImage(ImageIO.read(new File("redBlock.png")));
        blueBlock.setImage(ImageIO.read(new File("blueBlock.png")));
        greenBlock.setImage(ImageIO.read(new File("greenBlock.png")));
    } catch (IOException e) {
        e.printStackTrace();
    }   

    Random r = new Random();
    int rNum = r.nextInt(4);

    if(rNum==0) {
        return purpleBlock;
    } else if(rNum==1) {
        return redBlock;
    } else if(rNum==2) {
        return greenBlock;
    } else {
        return blueBlock;
    }
}

randomizer()每当调用该方法时,您都会从文件中重新读取所有色块图像。没有必要这样做,因为已经使用正确的图像创建了 ImageIcons,但不仅如此,这可能会极大地减慢您的程序速度。

于 2013-02-22T04:01:46.150 回答
1

使用ActionListenerfor 按钮,而不是MouseListener. 此外,当您的变量名称仅以数字后缀不同时,您应该考虑使用数组。您可以显着减少代码行数。您只需要 1 个声明而不是 49 个,并且大多数访问按钮变量的代码部分可以减少到每行 1 行加上一个封闭的 for 循环(1 行加上一个右大括号)。

于 2013-02-22T04:08:21.287 回答