В Java есть способ получить компонент, где обрабатывается событие? - PullRequest
1 голос
/ 25 февраля 2009

Предположим, у меня есть 4 квадрата синего, белого, красного и зеленого цветов (myComponent), связанных с событием нажатия мыши. В какой-то момент мышь нажимают на одну из них, скажем, желтую, и событие активируется.

Теперь поток управления находится внутри функции обработки событий. Как я могу получить MyComponent - желтый квадрат - который вызвал это отсюда?

EDIT

У меня есть еще один вопрос. Есть ли способ узнать положение компонента? Моя проблема немного сложнее, чем я сказал.

По сути, у меня есть сетка, полная квадратов. Когда я нажимаю на один из квадратов, я должен знать, какой это квадрат, чтобы я мог обновить свою матрицу. Дело в том, что, если я сам вычислю это, оно будет работать только с заданным разрешением.

У меня есть GridBagLayout, и внутри него myComponents. Я должен знать, какой именно компонент, например, компонент [2] [2], вызвал прерывание.

Я имею в виду, я могу сказать, какой из компонентов сделал это, но не где в матрице он расположен.

Ответы [ 2 ]

4 голосов
/ 25 февраля 2009

MouseEvent.getSource() возвращает объект, для которого изначально произошло событие.

У меня есть GridBagLayout, а внутри него являются myComponents. Я должен знать какой из компонентов точно - как, component[2][2] - вызвало прерывание.

Вы можете хранить индексы, например, (2,2), внутри каждого myComponent при добавлении их в матрицу. Таким образом, учитывая компонент, вы всегда можете определить его положение в матрице.

class MyComponent extends JButton
{
    final int i; // matrix row
    final int j; // matrix col

    // constructor
    MyComponent(String text, int i, int j)
    {
        super(text);
        this.i = i;
        this.j = j;
    }

    ...
}
1 голос
/ 25 февраля 2009

Добавляя MouseListener (или, альтернативно, MouseAdapter, если вам не нужно переопределять все MouseListener' methods) to each of your colored boxes, when an event such as a mouse click occurs, the MouseListener will be called with a [ MouseEvent`] 3 , который можно использовать для получения компонента, на который был выполнен щелчок.

Например:

final MyBoxComponent blueBox =   // ... Initialize blue box
final MyBoxComponent whiteBox =  // ... Initialize white box
final MyBoxComponent redBox =    // ... Initialize red box
final MyBoxComponent greenBox =  // ... Initialize green box

MouseListener myListener = new MouseAdapter() {
    public void mouseClicked(MouseEvent e)
    {
        // Obtain the Object which caused the event.
        Object source = e.getSource();

        if (source == blueBox)
        {
            System.out.println("Blue box clicked");
        }
        else if (source == whiteBox)
        {
            System.out.println("White box clicked");
        }
        // ... and so on.
    }
};

blueBox.addMouseListener(myListener);
whiteBox.addMouseListener(myListener);
redBox.addMouseListener(myListener);
greenBox.addMouseListener(myListener);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...