gpt4 book ai didi

java - 鼠标 ActionListener 和鼠标点击 (MouseEvent e)

转载 作者:行者123 更新时间:2023-11-29 03:36:53 25 4
gpt4 key购买 nike

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

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

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

哦,我知道我不需要所有这些导入,只是我确实曾经使用过它们,但我忘了将它们取出来,因为我对当前的问题太着迷了。

对于重复的内容感到抱歉...以及其中的所有内容。这是我目前知道的唯一方法。

谢谢!

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 与 JButton 一起使用,而应使用 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() 方法时,您都会从文件中重新读取所有色 block 图像。没有必要这样做,因为已经使用正确的图像创建了 ImageIcons,但不仅如此,这可能会痛苦地减慢您的程序。

关于java - 鼠标 ActionListener 和鼠标点击 (MouseEvent e),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com