首页 > 解决方案 > 如何获取 JLabel [ ] [ ] 中单击的标签鼠标的索引?

问题描述

我有一个二维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 索引。

标签: javaarraysswingjlabelmouselistener

解决方案


用于定位您正在寻找的xy的未经测试和未编译的代码如下。
请注意,getX()类方法MouseEvent获取计算机屏幕上鼠标指针的位置,而不是数组中的x。类似的方法getY()。这就是为什么你什么都得不到。

在下面的代码中,我将相同的内容添加MouseListener到所有JLabels.

MouseEvent包含JLabel鼠标被点击的和类的方法返回getSource()MouseEvent。然后您需要遍历您的JLabels 数组并查看哪个与MouseEvent源匹配。

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);
    }
}

推荐阅读