Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 如何获取在JLabel[]中单击的标签鼠标的索引?_Java_Arrays_Swing_Jlabel_Mouselistener - Fatal编程技术网

Java 如何获取在JLabel[]中单击的标签鼠标的索引?

Java 如何获取在JLabel[]中单击的标签鼠标的索引?,java,arrays,swing,jlabel,mouselistener,Java,Arrays,Swing,Jlabel,Mouselistener,我有一个JLabel组件的二维数组,我想得到鼠标在标签中单击的位置,如下所示 Jlabel [x] [y] // I want this x & y 我该怎么做 我试过了,但什么也没得到 new MouseAdapter(){ public void mousePressed(MouseEvent e){ int a=e.getX(); int b=e.getY(); MainBoard.ML.label=MainBoard.di

我有一个JLabel组件的二维数组,我想得到鼠标在标签中单击的位置,如下所示

Jlabel [x] [y] // I want this x & y
我该怎么做

我试过了,但什么也没得到

new MouseAdapter(){
    public void mousePressed(MouseEvent e){
        int a=e.getX();
        int b=e.getY();
        MainBoard.ML.label=MainBoard.disk1[a][b];
        Color c=MainBoard.ML.label.getForeground();
        if(color==1)
            MainBoard.ML.label.setForeground(Color.black);
        else
            MainBoard.ML.label.setForeground(Color.white);
        new Play(a,b,color);
        new Player2(r);
        MainBoard.disk1[a][b].addMouseListener(new ML1(a,b));
    }
};

我想得到标签数组的x&y索引

下面是用于查找x和y的未经测试和未编译的代码。 请注意,MouseEvent类的getX方法获取鼠标指针在计算机屏幕上的位置,而不是数组中的x。方法getY也是如此。这就是你一无所获的原因

在下面的代码中,我将相同的MouseListener添加到所有JLabel

MouseEvent包含鼠标被单击的JLabel,并且类MouseEvent的方法getSource返回它。然后,您需要遍历jlabel数组,看看哪一个与MouseEvent源匹配


在mousePressed事件中指定MouseListener?这真的是你想要的吗?您应该在创建每个JLabel时为它们分配一个鼠标侦听器。我想获得鼠标单击的位置并将其传递给ML以执行操作,如果您有任何想法,我将非常感激,如果将鼠标侦听器添加到标签本身,e.getSource将获得单击的标签。根据目前的信息,这是我唯一愿意尝试提供的帮助。更多或更好的建议:1要更快地获得更好的帮助,请添加或。2使用缩进代码行和代码块的逻辑和一致形式。缩进的目的是使代码的流程更易于遵循!大多数IDE都有专门用于格式化代码的键盘快捷键。我应该如何使用e.getSource?我应该如何使用。。提示:添加@f1sh或其他人,@对于通知此人新评论非常重要。顺便说一句,f1sh提出了一个你应该解决的问题——事件的检测不是添加侦听器的地方。谢谢你的合作,我只是编译并测试了你的代码,但我没有再得到任何东西。你介意我发送代码给你看看有什么问题吗。@edie.lp我发布的代码不是一个完整的程序,这只是为了帮助你开始。谢谢你的帮助
int rows = // number of rows in 2D array
int cols = // number of cols in 2D array
final JLabel[][] labels = new JLabel[rows][cols]
MouseListener ml = new MouseAdapter() {
    public void mousePressed(MouseEvent me) {
        Object src = me.getSource();
        int x = -1;
        int y = -1;
        for (int i = 0; i < labels.length(); i++) {
            for (int j = 0; j < labels[i].length; j++) {
                if (src == labels[i][j]) {
                    x = i;
                    y = j;
                    break;
                }
            }
            if (x >= 0) {
                break;
            }
        }
        if (x > 0) {
            System.out.printf("JLabel[%d][%d] was clicked.%n", x, y);
        }
        else {
            System.out.println("Could not find clicked label.");
        }
    }
}
for (int row = 0; row < rows; row++) {
    for (int col = 0; col < cols; col++) {
        labels[row][col] = new JLabel(row + "," + col);
        labels[row][col].addMouseListener(ml);
    }
}