2013-02-22 60 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