Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(JFrames):仅对ArrayList的最后2个元素调用mouseListener()_Java_Swing_Jframe_Jpanel_Mouselistener - Fatal编程技术网

Java(JFrames):仅对ArrayList的最后2个元素调用mouseListener()

Java(JFrames):仅对ArrayList的最后2个元素调用mouseListener(),java,swing,jframe,jpanel,mouselistener,Java,Swing,Jframe,Jpanel,Mouselistener,我试图制作一个简单的跳棋游戏,但当我运行当前版本打印10个随机颜色(白色或黑色)的方块时,方块类的鼠标侦听器只响应最后2个方块,而不响应任何其他方块。我完全不知道为什么这只适用于两个街区。JFrame的代码在MyCraft.java中,框架上实际面板的代码在MyCraft面板中,块实例的代码在Block.java中 如果有人能回复他们的反馈,我们将不胜感激 MyCraft.java的代码: package com.matthewpipie.MyCraft; import javax.swing

我试图制作一个简单的跳棋游戏,但当我运行当前版本打印10个随机颜色(白色或黑色)的方块时,方块类的鼠标侦听器只响应最后2个方块,而不响应任何其他方块。我完全不知道为什么这只适用于两个街区。JFrame的代码在MyCraft.java中,框架上实际面板的代码在MyCraft面板中,块实例的代码在Block.java中

如果有人能回复他们的反馈,我们将不胜感激

MyCraft.java的代码:

package com.matthewpipie.MyCraft;

import javax.swing.JFrame;

public class MyCraft {

    public static void main(String[] args) {
        final int FRAME_WIDTH = 1280;
        final int FRAME_HEIGHT = 720;

        JFrame frame = new JFrame("MyCraft");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new MyCraftPanel());
        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setVisible(true);
    }

}
MyCraftPanel.java的代码:

Block.java的代码:

我发布了pastebin,因为我认为否则会占用太多空间

谢谢

编辑:由于请求,下面是Blocks.java中的“重要代码”:

package com.matthewpipie.MyCraft;

public class Block extends JPanel {
    private static final int BLOCK_SIZE = 90;
    private int id;
    private int x;
    private int y;
    private Color color;

    public Block(int id, int x, int y) {
        this.setUpFrame();
        this.id = id;
        this.x = x;
        this.y = y;
        this.generateColor();
        this.setActionListeners();
    }

    public void setUpFrame() {
        this.setPreferredSize(new Dimension(Block.getBLOCK_SIZE(), Block.getBLOCK_SIZE()));
    }

    public void setActionListeners() {
        System.out.print("setting up ");
        System.out.println(this.getId());
        this.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                System.out.println("clicky45");
            }
        });
    }

    **getters and setters*
}
“clicky45”仅当我单击某个奇怪的垂直不可见线时才会出现


编辑:我发现这与块的大小有关。它们越大,点击的次数就越多。如果它们足够小,则无法单击任何一个

我想否则会占用太多空间。
-正确。我们不想看到堆芯倾倒。你需要发布一篇文章来说明这个问题(在这个论坛上而不是在pastebin上)。所以,去掉所有与所述问题没有直接关系的代码。剩下的代码将被编译,以便我们可以测试它,以便查看您描述的行为。@camickr完成,添加了新信息,以及该代码如何编译?要更快获得更好的帮助,请发布或。请阅读所有这两个链接。投票结束,因为你似乎不了解这个概念。。