Вы проверили Phalanger? Это компилирует PHP в код.NET. Вот некоторые сравнительные тесты , которые показывают, что это может существенно улучшить производительность.
Используйте AWTEventListener для фильтрации событий MouseEvents:
long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK;
Toolkit.getDefaultToolkit().addAWTEventListener( new AWTEventListener()
{
public void eventDispatched(AWTEvent e)
{
System.out.println(e);
}
}, eventMask);
Вы можете добавить GlassPane по всему JFrame, добавить к нему MouseInputAdapter , чтобы захватывать все возможные события мыши, а затем использовать [SwingUtilities. getDeepestComponentAt ()] [3] для получения фактического компонента и [SwingUtilities.convertMouseEvent ()] [4] для делегирования события мыши из стеклянной панели фактическому компоненту.
Однако я не уверен в производительности влияние этого - в отличие от KeyEventDispatcher, которому просто нужно запускать событие всякий раз, когда нажимается клавиша, несколько событий генерируются, когда пользователь перемещает мышь - и в отличие от KeyEventDispatcher, вам необходимо повторно отправить событие нижнему компоненту, чтобы он справиться с этим.
(Извините - stackoverflow неправильно обрабатывает ссылки на методы SwingUtilities ... ссылки отображаются ниже, а не в тексте.)
[3]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#getDeepestComponentAt (java.awt.Component , int, int) [4]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#convertMouseEvent (java.awt.Component , java.awt. event.MouseEvent, java.awt.Component)
Вы должны использовать glassPane JFrame: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#getGlassPane ()
Просто получите стеклянную панель JFrame с помощью frm.getGlassPane ( ) и используйте на нем addMouseListener (), чтобы захватить все события мыши внутри окна.
Реализовать все прослушиватели, связанные с мышью, в классе и зарегистрировать этот класс в качестве обработчика для всех событий, связанных с мышью.
Интерфейсы, связанные с мышью, будут
MouseListener MouseMotionListener MouseWheelListener
Возможно, вы захотите реализовать подкласс MouseAdapter
, абстрактный класс, который предоставляет пустые реализации всех методов, определенных в Mouse * Listener
Интерфейсы. Как только вы это сделаете, вы можете зарегистрировать его в дочерних компонентах как MouseListener
, когда они будут созданы. Когда вы укажете, что ваши компоненты «меняются», вы захотите убедиться, что вы также отменили регистрацию слушателя, если вы надеетесь выпустить свои компоненты в течение жизненного цикла JFrame.