Java多个按钮坐标

时间:2012-03-22 09:09:58

标签: java swing listener coordinates jbutton

我是Java新手。

我正在制作地雷。我使用GridLayout和paramteres(x_length,y_length)。我想知道我按下了哪个按钮 - >他的坐标(x,y)。但如果我输入它给听众它会给我错误 - >改变修饰符' x'决赛。 所以我的问题是如何才能简单地获得按钮的坐标?

我还想问一下如何才能简单地改变按钮的大小? 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]);
        }
    }

2 个答案:

答案 0 :(得分:2)

首先应该为侦听器而不是匿名类创建自定义类,因为它需要参数(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()更改。

答案 1 :(得分:2)

  1. 对于Mines更好用[{3}}

  2. 放在那里JToggleButtons