Java多按钮坐标

标签 java swing listener coordinates jbutton

我是 Java 新手。

我在做地雷。我正在使用带有参数 (x_length, y_length) 的 GridLayout。我想知道我按下了哪个按钮 -> 他的坐标 (x,y)。但是,如果我将它键入给监听器,它会给我错误 -> 将 'x' 的修饰符更改为 final。 所以我的问题是如何简单地获取按钮的坐标?

而且我还想问一下我怎样才能简单地改变按钮的大小? setSize 对我不起作用。

    for (int y = 0; y < y_length; y++)
    {
        for (int x = 0; x < x_length; x++)
        {               
            buttons[x][y] = new JButton("X");

            buttons[x][y].addMouseListener(new MouseAdapter()
            {
                public void mouseClicked(MouseEvent e)
                {
                    if (e.getButton() == MouseEvent.BUTTON1)
                    {
                        //exception -> Cannot refer to a non-final variable x inside an inner class defined in a different method
                        JOptionPane.showMessageDialog(null, "Left -> " + x + " | " + y);
                    }
                    else if (e.getButton() == MouseEvent.BUTTON3)
                    {
                        JOptionPane.showMessageDialog(null, "Right -> " + x + " | " + y);
                    }
                }
            });
            mines_array.add(buttons[x][y]);
        }
    }

最佳答案

您应该首先为您的监听器创建一个自定义类而不是匿名类,因为它需要参数(x 和 y)。

private static class ButtonMouseListener extends MouseAdapter {
    private final int x;
    private final int y;

    public ButtonMouseListener(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void mouseClicked(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON1) {
            JOptionPane.showMessageDialog(null, "Left -> " + x + " | " + y);
        }  else if (e.getButton() == MouseEvent.BUTTON3) {
            JOptionPane.showMessageDialog(null, "Right -> " + x + " | " + y);
        }
    }
}

然后,您可以像这样使用您的代码:

for (int y = 0; y < y_length; y++) {
    for (int x = 0; x < x_length; x++) {               
        buttons[x][y] = new JButton("X");
        buttons[x][y].addMouseListener(new ButtonMouseListener(x, y));
        mines_array.add(buttons[x][y]);
    }
}

就是这样,玩得开心。 关于按钮的大小,如果您在它们的父容器中使用布局,它们的大小将由布局自动计算并且不能通过 setSize() 更改。

关于Java多按钮坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9819173/

相关文章:

java - 双jsvc进程

java - 更改我的 java 绘图程序中的颜色

java - 矩阵到 JTable

java - Tomcat 不提供简单的 HTML 页面 (HTTP 404)

java - 确定纯 Java 中处理器缓存的大小

java - 是否可以在 swing 中单击按钮打开 Jmenu?

Java 监听器未在 Tomcat 下启动

java - 我的 JButton 操作监听器不工作

java - DrawerLayout onDrawerClosed() 调用两次

java - 我将如何测试我的应用程序中的日志记录? Mockito 新手和测试 - 寻求方向