出于明显的原因,我在游戏中实现了MouseListener。用户需要能够单击面板。
问题不在于单击电路板本身,单击重置按钮resetBoard
以及鼠标监听器。当我单击按钮时,面板会发生变化,但是在释放单击时,面板会再次发生变化。考虑到我所有的动作都在public void mouseClicked(MouseEvent e)
块下,所以我找不到任何地方可以解释为什么在单击和释放时都会发生变化。我有空的mouseReleased
,mouseEntered
,mouseExited
,mousePressed
。
基本上,有人可以帮助我理解为什么只有mouseClicked
不为空时,同时按下鼠标和按下Up(以相同的动作)同时复位板。
哦,我知道我并不需要所有这些进口,只是我曾经一次使用它们,而我却忘记将它们取出来了,因为我对本期杂志太在意了。
很抱歉,重复的内容以及其中的所有内容。这是我目前知道该怎么做的唯一方法。
谢谢!
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();
}
});
}
}
最佳答案
不要将MouseListener与JButtons一起使用,而应使用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,但不仅如此,这还可能会严重降低程序速度。