MouseEvent.consume - похоже, ничего не делает, как подавить дальнейшую обработку? - PullRequest
0 голосов
/ 19 июня 2020

Я работаю над заголовком таблицы, где я хочу иметь возможность сортировать столбец по левому щелчку + выбирать весь столбец с помощью ctrl + left click или что-то в этом роде.

Но мне кажется, чтобы иметь возможность подавить то, чтобы оба события происходили одновременно. Похоже, что MouseEvent.consume () на самом деле ничего не потребляет, а скорее «отмечает» событие как потребленное, но оно все еще обрабатывается AWT. Итак, идея заключается в том, что весь код должен проверять MouseEvent.isConsumed () или мне что-то не хватает?

Вот мой код:

package com.sigge.test;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;

public class MouseListenerExample extends JFrame implements MouseListener
{
    MouseListenerExample()
    {
        addMouseListener(this);
        addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                System.out.println("Inner clicked");
            }

            @Override
            public void mouseReleased(MouseEvent e)
            {
                System.out.println("Inner released");
            }

            @Override
            public void mousePressed(MouseEvent e)
            {
                System.out.println("Inner pressed");
            }
        });
        setSize(300, 300);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
        System.out.println("Mouse Clicked");
        e.consume();
        System.out.println("Mouse Clicked - After consume()");
    }

    @Override
    public void mouseEntered(MouseEvent e)
    {
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
    }

    @Override
    public void mousePressed(MouseEvent e)
    {
        System.out.println("Mouse Pressed");
        e.consume();
        System.out.println("Mouse Pressed - After consume()");
    }

    @Override
    public void mouseReleased(MouseEvent e)
    {
        System.out.println("Mouse Released");
        e.consume();
        System.out.println("Mouse Released - After consume()");
    }

    public static void main(String[] args)
    {
        new MouseListenerExample();
    }
}

Насколько я понимаю, нажатие должно генерировать только одно событие, и «внутренний» прослушиватель должен быть подавлен, но оба обработчика событий выполняются. Что дает?

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