I've found a solution that, as far as my testing has revealed, works on Mac but not Windows. Horizontal scrolling is interpreted the same way as vertical scrolling, albeit with Shift held down.
Thus overriding the following listener method does the job:
@Override
public void mouseWheelMoved(MouseWheelEvent e)
{
int n = e.getWheelRotation();
if(e.isShiftDown())
//we've scrolled n times horizontally
else
//we've scrolled n times vertically.
}