public void flipHandleIfNeeded(boolean flipX, boolean flipY) { PBoundsLocator l = (PBoundsLocator) getLocator(); if (flipX || flipY) { switch (l.getSide()) { case SwingConstants.NORTH: { if (flipY) { l.setSide(SwingConstants.SOUTH); } break; } case SwingConstants.SOUTH: { if (flipY) { l.setSide(SwingConstants.NORTH); } break; } case SwingConstants.EAST: { if (flipX) { l.setSide(SwingConstants.WEST); } break; } case SwingConstants.WEST: { if (flipX) { l.setSide(SwingConstants.EAST); } break; } case SwingConstants.NORTH_WEST: { if (flipX && flipY) { l.setSide(SwingConstants.SOUTH_EAST); } else if (flipX) { l.setSide(SwingConstants.NORTH_EAST); } else if (flipY) { l.setSide(SwingConstants.SOUTH_WEST); } break; } case SwingConstants.SOUTH_WEST: { if (flipX && flipY) { l.setSide(SwingConstants.NORTH_EAST); } else if (flipX) { l.setSide(SwingConstants.SOUTH_EAST); } else if (flipY) { l.setSide(SwingConstants.NORTH_WEST); } break; } case SwingConstants.NORTH_EAST: { if (flipX && flipY) { l.setSide(SwingConstants.SOUTH_WEST); } else if (flipX) { l.setSide(SwingConstants.NORTH_WEST); } else if (flipY) { l.setSide(SwingConstants.SOUTH_EAST); } break; } case SwingConstants.SOUTH_EAST: { if (flipX && flipY) { l.setSide(SwingConstants.NORTH_WEST); } else if (flipX) { l.setSide(SwingConstants.SOUTH_WEST); } else if (flipY) { l.setSide(SwingConstants.NORTH_EAST); } break; } } } // reset locator to update layout setLocator(l); }