2013-02-22 35 views
1

为了明显的原因,我在游戏中实现了一个MouseListener;用户需要能够点击该板。mouseActionListener和mouseClick(MouseEvent e)

问题不在于单击主板本身,它带有重置按钮resetBoard以及鼠标侦听器。当我点击按钮时,电路板会改变,但当点击被释放时,电路板会再次改变。考虑到我所有的操作都在public void mouseClicked(MouseEvent e)区块下,我找不到解释为什么它会在点击和释放时发生变化的任何地方。我有空mouseReleasedmouseEntered, 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(); 
      } 
     }); 
    } 
} 
+1

对按钮使用'ActionListener',而不是'MouseListener'。另外,如果变量名称只有数字前缀不同,则应该使用数组来代替。通过对这样的数组进行for循环的明智使用,可以轻松地将代码行数减半(或更多)。 – 2013-02-22 04:01:30

+0

我试着做@ Code-Guru,但即使按照教程,我也无法弄清楚我的生活。但是,谢谢你的建议! – pattmorter 2013-02-22 04:03:48

+1

@pattmorter:向我们展示您使用ActionListener尝试过的内容,因为这是使用JButton的正确方法。 – 2013-02-22 04:04:26

回答

3

请勿在JButton中使用MouseListener,而应使用ActionListeners。这一切都在button tutorial中详细说明,我强烈建议您尽快阅读。我与你的代码中看到

一个主要问题是在这里找到:

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已经创建了正确的图像,但不仅如此,这可能会让您的程序非常痛苦。

+0

也许我应该发布一个答案,而不是评论= p – 2013-02-22 04:02:55

+0

@code:oops,是的,是的,这样做,我会删除我的。你也有避免冗余的好消息。那是一些非常难看的代码,那就是乞求简化和清理。 – 2013-02-22 04:03:25

+0

我在开始时使用了'ActionListeners',但是发生了同样的问题。 – pattmorter 2013-02-22 04:04:41

1

对按钮使用ActionListener,而不是MouseListener。另外,如果变量名称只有数字后缀的不同,则应该使用数组来代替。您可以显着减少代码行数。你只需要1个声明而不是49个,并且访问按钮变量的大部分代码段可以减少到1行,再加上一个封闭的for循环(1行加上右括号)。

+0

1+为好建议! – 2013-02-22 04:09:20

+0

@ Code-Guru:我只是做一个'ArrayList '然后用'new JButton(“Button ::”+ i)''for循环吗?这就是我能想到的。 – pattmorter 2013-02-22 04:23:16

+0

@pattmorter当你尝试时会发生什么? – 2013-02-22 04:27:03