Координаты нескольких кнопок Java - PullRequest
1 голос
/ 22 марта 2012

Я новичок в Java.

Я делаю Mines.Я использую GridLayout с параметрами (x_length, y_length).Я хотел бы знать, какую кнопку я нажал -> его координаты (х, у).Но если я набираю его для слушателя, это дает мне ошибку -> изменить модификатор '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]);
        }
    }

Ответы [ 2 ]

2 голосов
/ 22 марта 2012
  1. для Mines лучше использовать JToggleButtons

  2. поставить туда ClientProperty

2 голосов
/ 22 марта 2012

Сначала вы должны создать собственный класс для слушателя, а не анонимный, поскольку для него нужны параметры (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 ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...