下面列出了java.awt.Container#dispatchEvent ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void mouseWheelMoved(MouseWheelEvent event) {
// on reporte l'évènement mouseWheelMoved de ce scrollPane vers son parent
final Container parent = event.getComponent().getParent();
parent.dispatchEvent(
SwingUtilities.convertMouseEvent(event.getComponent(), event, parent));
}
@Override
public void mouseWheelMoved(final MouseWheelEvent e) {
if (e.isControlDown() && e.getWheelRotation() != 0) {
double oldZoomFactor = rendererView.getModel().getZoomFactor();
if (e.getWheelRotation() < 0) {
rendererView.getModel().zoomIn();
} else {
rendererView.getModel().zoomOut();
}
rendererView.getModel().fireProcessZoomChanged();
// calculate how the scrollbar needs to be adjusted for centered zoom
double relativeZoomFactor = rendererView.getModel().getZoomFactor() / oldZoomFactor;
double differenceHorizontal = e.getPoint().getX() * (relativeZoomFactor - 1);
double differenceVertical = e.getPoint().getY() * (relativeZoomFactor - 1);
int newX = Math.max(0, (int) (scrollPane.getHorizontalScrollBar().getValue() + differenceHorizontal));
int newY = Math.max(0, (int) (scrollPane.getVerticalScrollBar().getValue() + differenceVertical));
scrollPane.getHorizontalScrollBar().setValue(newX);
scrollPane.getVerticalScrollBar().setValue(newY);
// prevent flickering when another adjustment of the scrollbars is needed
RepaintManager.currentManager(scrollPane).markCompletelyClean(scrollPane);
/**
* Setting the value as above does not always work since the scrollbars are not yet
* updated to the size changes caused by the zooming. Set flag an values to try
* again after the resizing happened.
*/
zoomed = true;
desiredVerticalScrollValue = newY;
desiredHorizontalScrollValue = newX;
return;
}
Container p = rendererView.getParent();
if (p != null) {
p.dispatchEvent(SwingUtilities.convertMouseEvent(rendererView, e, p));
}
}
private void sendToParent(@Nonnull final AWTEvent evt) {
final Container parent = this.getParent();
if (parent != null) {
parent.dispatchEvent(evt);
}
}
private void sendEventToParent(@Nonnull final MouseEvent e) {
final Container parent = this.getParent();
if (parent != null) {
parent.dispatchEvent(e);
}
}